Существует ли различие между фиксацией, и откат в транзакции, только имеющей, выбирает?

Спасибо всем за ответы и комментарии, я все учел.

Я нашел свое решение после добавления:

ini_set('display_errors', 1); 
ini_set('log_errors',1); 
error_reporting(E_ALL); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Для всех, у кого есть такая же проблема, все поля вашей таблицы должны быть заполнены для создания записи. Например, если ваша таблица содержит имя, фамилию, адрес электронной почты и пароль, все они должны быть переданы в таблицу; пробелы не могут быть оставлены.

20
задан Tamas Czinege 13 October 2008 в 16:04
поделиться

6 ответов

Базы данных часто сохраняют любого журнал исходного вида записи (что это было перед транзакцией) или журнал послеизображения (чем это будет, когда транзакция завершится.), Если это сохраняет исходный вид записи, который должен быть восстановлен на откате. Если это сохраняет послеизображение, которое должно заменить данные в случае фиксации.

Oracle имеет обоих пространство отката и журнал. Журнал транзакции накапливает блоки, которые позже записаны устройствами записи DB. Так как это asychronous, почти ничто, что связанное устройство записи DB оказывает любое влияние на Вашу транзакцию (если очередь заполняется, то Вам, возможно, придется ожидать.)

Даже для транзакции только для запроса, я был бы готов держать пари, что существуют некоторые немного транзакционного ведения записей в областях отката Oracle. Я подозреваю, что откат требует некоторой работы над частью Oracle, прежде чем это решит, что нет ничего для фактического отката. И я думаю, что это синхронно с Вашей транзакцией. Вы не можете действительно выпустить блокировки, пока откат не завершается. [Да, я знаю, что Вы не используете никого в своей транзакции, но проблема блокировки - то, почему я думаю, что откат должен быть полностью выпущен затем, все блокировки могут быть выпущены, затем Ваш откат закончен.]

, С другой стороны, фиксация является более или менее ожидаемым результатом, и я подозреваю, что отбрасывание области отката могло бы быть немного быстрее. Вы не создали записей транзакции, таким образом, устройство записи дб даже не проснется, чтобы проверить и обнаружить, что там не имел отношения.

я также ожидаю, что, в то время как фиксация может быть быстрее, различия будут незначительны. Столь незначительный, что Вы не смогли даже измерять их в бок о бок сравнение.

12
ответ дан 30 November 2019 в 00:48
поделиться

Я соглашаюсь с предыдущими ответами, что нет никакого различия между ФИКСАЦИЕЙ и ОТКАТОМ в этом случае. Могло бы быть незначительное различие в процессорное время, должен был решить, что нет ничего для ФИКСАЦИИ по сравнению с процессорным временем, должен был решить, что нет ничего для ОТКАТЫВАНИЯ. Но, если это - незначительное различие, мы можем безопасно забыть о приблизительно этом.

Однако стоит указать, что существует различие между сессией, которая делает набор запросов в контексте единственной транзакции и сессии, которая делает те же запросы в контексте ряда транзакций.

, Если клиент запускает транзакцию, выполняет запрос, выполняет ОТКАТ COMMITor, то запускает вторую транзакцию и выполняет второй запрос, нет никакой гарантии, что второй запрос будет наблюдать то же состояние базы данных как первый запрос. Иногда, поддержание единственного последовательного представления данных является существенным. Иногда, получение более актуального представления данных является существенным. Это зависит от того, что Вы делаете.

я знаю, я знаю, OP не задавал этот вопрос. Но некоторые читатели могут спрашивать это позади своих умов.

8
ответ дан 30 November 2019 в 00:48
поделиться

В целом ФИКСАЦИЯ намного быстрее, чем ОТКАТ, но в случае, где Вы не сделали ничего, которое они - эффективно то же.

3
ответ дан 30 November 2019 в 00:48
поделиться

Так как Вы не сделали никакого DML, я подозреваю, что не было бы никакого различия между ФИКСАЦИЕЙ и ОТКАТОМ в Oracle. Так или иначе там не имеет отношения.

0
ответ дан 30 November 2019 в 00:48
поделиться

Документация указывает что:

  • Oracle рекомендует явно закончить каждую транзакцию в прикладных программах с оператором COMMIT или ROLLBACK, включая последнюю транзакцию, прежде, чем разъединиться от Базы данных Oracle. Если Вы явно не фиксируете транзакцию, и программа завершается неправильно, то последняя незафиксированная транзакция автоматически откатывается. Нормальный выход от большинства утилит Oracle и инструментов заставляет текущую транзакцию фиксироваться. Нормальный выход из программы предварительного компилятора Oracle не фиксирует транзакцию и полагается на Базу данных Oracle для отката текущей транзакции.

http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_4010.htm#SQLRF01110

, Если Вы хотите o, принимает решение сделать один, или другой затем Вы могли бы также сделать тот, который совпадает с выполнением ничего, и просто фиксируйте его.

3
ответ дан 30 November 2019 в 00:48
поделиться

Ну, мы должны принять во внимание то, что ВЫБОР возвращает в Oracle. Существует два режима. По умолчанию ВЫБОР возвращает данные, поскольку те данные посмотрели в самый момент, оператор SELECT начал выполняться (это - поведение по умолчанию в ФИКСИРОВАВШЕМ режиме изоляции READ, транзакционном режиме по умолчанию). Таким образом, если ОБНОВЛЕНИЕ/ВСТАВЛЕНИЕ выполнялось после того, как ВЫБОР был выпущен, который не будет видим в наборе результатов.

Это может быть проблемой, если необходимо сравнить два набора результатов (например, debta и стороны кредита приложения главной бухгалтерской книги). Для этого у нас есть второй режим. В тех данных возвратов режима SELECT, поскольку это смотрело в данный момент, текущая транзакция началась (поведение по умолчанию на и Уровнях сериализуемой изоляции ТОЛЬКО ДЛЯ ЧТЕНИЯ).

Так, по крайней мере иногда необходимо выполниться, ВЫБИРАЕТ в транзакции.

1
ответ дан 30 November 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: