Когда строка вставляется в БД? - PullRequest
4 голосов
/ 02 мая 2011

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

Ответы [ 3 ]

3 голосов
/ 02 мая 2011

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

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

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

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

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

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

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

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

И я суммировал Запись в журнал впереди

3 голосов
/ 02 мая 2011

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

0 голосов
/ 02 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...