могу ли я понять функцию php oracle oci_commit()

#php #oracle

#php #Oracle

Вопрос:

Я прочитал следующее в руководстве по PHP / Oracle из php.net:

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

Есть две вещи, которые я не понимаю:

  1. Для чего выполняется фиксация?
  2. Что это значит, что «другие пользователи базы данных не увидят изменений, пока они не будут зафиксированы?» Как они не смогут увидеть изменения?

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

1. Это должно быть хорошим базовым чтением: en.wikipedia.org/wiki/Database_transaction

Ответ №1:

Что ж, вам следует почитать еще немного о транзакциях.

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

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

Ответ №2:

Фиксация — это завершение транзакции, в которой изменения становятся постоянными.

Поскольку Oracle имеет согласованное представление для чтения, пользователи, которые запускают транзакцию, смогут видеть только данные, которые были зафиксированы при запуске новой транзакции. Итак, когда пользователь A запускает транзакцию, а пользователь B изменяет некоторые значения в таблице и фиксирует ее, пользователь A не увидит измененные данные, пока пользователь A не запустит новую транзакцию. Согласованное представление чтения гарантирует, что все пользователи всегда видят согласованное состояние, в котором зафиксированы все данные.

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

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

1. ааааааааааааа, хорошо, что насчет php mysql, я думаю, это делает это автоматическим, не так ли?

2. Для mysql я не знаю. Автоматическая фиксация имеет некоторые недостатки, так что, надеюсь, это можно контролировать.