2015-12-02 2 views
2

Я использую двигатель InnoDb по умолчанию. И это то, что выглядит странно:Откат не работает в MySQL

mysql> start transaction; 
Query OK, 0 rows affected (0.00 sec) 

mysql> set session transaction isolation level serializable; 
Query OK, 0 rows affected (0.00 sec) 

mysql> create table test_1(id int); 
Query OK, 0 rows affected (0.07 sec) 

mysql> rollback; 
Query OK, 0 rows affected (0.00 sec) 

mysql> show tables; 
+------------------+ 
| Tables_in_reestr | 
+------------------+ 
| test_1   | 
+------------------+ 
1 rows in set (0.00 sec) 

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

+1

Проверка: [13.3.3 Заявления, которые вызывают неявное Commit] (https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html). – wchiquito

+0

Доброта, что ?! Такой длинный список заявлений. Это невероятно. – Jacobian

+0

BTW. Я только что протестировал его, что, если я добавлю 'INSERT' в таблицу сразу после' CREATE', то после отката я все еще могу видеть, что данные были добавлены в таблицу - вопреки тому, что я хотел достичь. Означает ли это, что MySQL настолько противоречив и на самом деле мусор ??? – Jacobian

ответ

2

Чтобы подробнее остановиться на комментарии выше: в MySQL, в основном все операции, которые изменяют объекты базы данных, выполняются автоматически. Основными категориями являются:

  1. любой DDL на ваших объектах, как CREATE/ALTER/DROP TABLE/VIEW/INDEX ...
  2. все, что изменяет системную базу данных mysql, как ALTER/CREATE USER,
  3. любые административные команды, как ANALYZE,
  4. любые инструкции по загрузке/репликации данных.

На самом деле, я считаю, что лучше всего предположить, что INSERT, UPDATE и DELETE безопасны, а все остальное не так.

Источник: https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

+0

Спасибо! Это абсолютно правильно. Я только что проверил его, и он работает, как вы говорите. – Jacobian

+0

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

+0

Ну, это зависит. SQL Server, да, но Oracle в этом случае очень похож на MySQL. – marmarta

Смежные вопросы