#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:
Зависит от реализации базы данных / таблицы. Это может произойти только при интеграции журнала транзакций — до этого времени строка вставляется только в журнал транзакций и в память.