Почему команды DML, выполняемые до и после команды DDL, автоматически фиксируются? - PullRequest
1 голос
/ 19 мая 2019

Я знаю, что команды DDL автоматически фиксируются, но почему это команды DML?

Это то, что я сделал:

  1. вставил данные в уже существующую таблицу с именем table1.

  2. создал таблицу с именем table2.

  3. вставил еще несколько данных в table1.

После того, как я вышел и снова вошел в систему, данные, введенные на первом и третьем этапах, не менялись, и мне не нужно было давать явную фиксацию.

Почему команды DML автоматически передаются в этом сценарии?

1 Ответ

5 голосов
/ 19 мая 2019

DML не фиксируется по умолчанию.

данные, введенные на первом и третьем шагах, сохраняются, и мне не нужно давать никаких явных подтверждений

Записи, вставленные вшаг 1 был зафиксирован, когда вы выполнили оператор CREATE TABLE на шаге 2. Вы знаете, что команды DDL в Oracle выдают коммит до и после выполнения DDL, поэтому вы не должны удивляться тому, что открытая транзакция фиксируется при создании таблицы.

Передача данных из шага 3 отличается.Я повторяю еще раз, что DML не фиксируется автоматически в Oracle.Однако часто клиентское программное обеспечение, которое мы используем для подключения к базе данных, может быть настроено на выдачу коммитов после каждого оператора.

Например, Autocommit - это опция в таких средах разработки, как TOAD и PL / SQL Developer.Если вы используете такой инструмент, отметьте Инструменты > Предпочтения для соответствующую настройку (точный путь может отличаться для конкретного продукта).Соединения JDBC автоматическая фиксация по умолчанию .То же самое для Microsoft ODBC.В SQL * Plus по умолчанию AUTOCOMMIT = OFF, но его можно включить.

Кроме того, SQL * Plus будет фиксировать строки при выходе, будь то путем подключения к новому сеансу или ввода exit (но не путем неконтролируемого выхода, такого как уничтожение клиентского процесса через диспетчер задач).Начиная с Oracle 11gR2 такое поведение настраивается через системную переменную EXITCOMMIT ;по умолчанию установлено значение ON.


Вот демоверсия db <> fiddle , которая демонстрирует, что DML перед утверждением инструкции DDL, но - на клиенте, где AUTOCOMMIT выключен - DML послезаявление можно откатить.

...