2015-04-24 3 views
0

Я читал, что инструкции «CREATE TABLE» и «DROP TABLE» автоматически фиксируются. Я пытаюсь понять их поведение в поле ниже сценария:Auto-COmmit of DDL

conn.setAutoCommit(false); 
stmt = conn.createStatement("CREATE TABLE ..."); 

conn.commit(); 

В приведенном выше случае будет установка Autocommit ложь будет иметь никакого влияния на CREATE TABLE автоматический совершали. Если conn.setAutoCommit (false) переопределяет свойство автоколлекции DDL, то что означает вся точка, потому что по умолчанию новое соединение находится в режиме автоматической фиксации.

Я считаю, что кроме MySQL и более ранних версий ORACLE, большинство основных СУБД позволяют откатить DDL. Мои вопросы касаются Если в MySQL DDL отката не разрешено, то какова точка установки автоматической фиксации подключения к false для DDL-операций?

Я по-настоящему ценю ваше мнение в разъяснении моих сомнений.

+0

ток (12cr1) версии Oracle до сих пор совершают на DDL. – Mat

ответ

1

Выполнение оператора DDL вызывает «неявное совершение». Но утверждение должно быть выполнено.

Сценарий, который вы даете, не имеет для меня смысла, метод createStatement не принимает строку в качестве аргумента, не так ли?

Мы обычно видим

stmt = conn.createStatement(); 
stmt.execute("CREATE TABLE ... "); 

Если вы на самом деле выполнить DDL заявление, это приводит к неявной фиксации, как если бы вы запустить COMMIT; заявление непосредственно перед запуском оператора DDL.

Но не верьте мне на слово, попробуйте сами, и обратитесь к соответствующему разделу Справочного руководства по MySQL для любой версии MySQL, в которой вы работаете.

Ссылка: https://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html

+0

Извините за параметр в createStatement(). Ваш код правильный. – learningMyWayThru