Когда строка фактически вставляется в БД?

#sql #database

#sql #База данных

Вопрос:

Когда строка фактически вставляется в базу данных? Это когда завершается инструкция «INSERT»? или когда оператор «COMMIT» завершается после оператора «INSERT»?

Комментарии:

1. Насколько я понимаю, строка помещается во временную таблицу до тех пор, пока она не будет проверена и не будет ожидать результата каких-либо других функций / триггеров и т.д. Как только вызывается COMMIT, она фактически записывается в таблицу.

Ответ №1:

Позже, чем вы думаете. Приведенные здесь принципы применимы в целом.

Весь смысл журнала транзакций заключается в том, чтобы гарантировать, что ACID сработает в случае сбоя питания сразу после завершения ВСТАВКИ. ВСТАВКА будет перенесена вперед или откатится назад как часть фазы восстановления (в большинстве СУБД)

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

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

Однако страница данных находится в памяти и доступна для использования.

Обратите внимание, ВСТАВКА может привести к разделению страницы, обновлению индексов, срабатыванию триггеров и т.д., Поэтому то, что я сказал, упрощено.

И не имеет значения, так или иначе, когда данные оказываются на диске: до тех пор, пока я могу получить данные, и это безопасно в случае, скажем, сбоя питания

Старое, но все еще актуальное для SQL Server: Основы ввода-вывода SQL Server 2000

И то, что я резюмировал, — это ведение журнала с опережением записи

Ответ №2:

Если вы работаете внутри транзакции, когда транзакция зафиксирована. В противном случае, немедленно.

Комментарии:

1. Согласен, хотя в зависимости от уровня изоляции данные могут быть видны до фиксации транзакции — en.wikipedia.org/wiki/Isolation_level

2. ОК. Здесь я использую IBM DB2. Есть ли способ действительно это выяснить?

3. Вот ссылка для выяснения этого: www-01.ibm.com/support/docview.wss?uid=swg21190874

Ответ №3:

Зависит от реализации базы данных / таблицы. Это может произойти только при интеграции журнала транзакций — до этого времени строка вставляется только в журнал транзакций и в память.