#php #oracle
#php #Oracle
Вопрос:
Я прочитал следующее в руководстве по PHP / Oracle из php.net:
Транзакция начинается, когда выполняется первая инструкция SQL, которая изменяет данные с
oci_execute()
использованиемOCI_NO_AUTO_COMMIT
флага. Дальнейшие изменения данных, сделанные другими операторами, становятся частью той же транзакции. Изменения данных, внесенные в транзакцию, являются временными до тех пор, пока транзакция не будет зафиксирована или откатана. Другие пользователи базы данных не увидят изменений, пока они не будут зафиксированы.
Есть две вещи, которые я не понимаю:
- Для чего выполняется фиксация?
- Что это значит, что «другие пользователи базы данных не увидят изменений, пока они не будут зафиксированы?» Как они не смогут увидеть изменения?
Комментарии:
1. Это должно быть хорошим базовым чтением: en.wikipedia.org/wiki/Database_transaction
Ответ №1:
Что ж, вам следует почитать еще немного о транзакциях.
Проще говоря — вы можете рассматривать любой запрос в транзакции как черновик, временный набор данных, который можете видеть только вы (в рамках вашего сеанса базы данных / подключения), если вы не выполняете фиксацию.
Другое аналогичное объяснение заключается в том, чтобы думать о транзакциях как о своих мыслях о чем-то, что вы на самом деле впоследствии записали бы на бумаге. Фиксация — это акт фактического написания этого, поэтому оно больше не существует только в вашей голове.
Ответ №2:
Фиксация — это завершение транзакции, в которой изменения становятся постоянными.
Поскольку Oracle имеет согласованное представление для чтения, пользователи, которые запускают транзакцию, смогут видеть только данные, которые были зафиксированы при запуске новой транзакции. Итак, когда пользователь A запускает транзакцию, а пользователь B изменяет некоторые значения в таблице и фиксирует ее, пользователь A не увидит измененные данные, пока пользователь A не запустит новую транзакцию. Согласованное представление чтения гарантирует, что все пользователи всегда видят согласованное состояние, в котором зафиксированы все данные.
Это приводит к тому, что один блок таблицы может иметь несколько версий в табличном пространстве отмены, просто для поддержки согласованных представлений для чтения для различных транзакций.
Комментарии:
1. ааааааааааааа, хорошо, что насчет php mysql, я думаю, это делает это автоматическим, не так ли?
2. Для mysql я не знаю. Автоматическая фиксация имеет некоторые недостатки, так что, надеюсь, это можно контролировать.