mysqlトランザクションのロールバックが不完全です

2197 ワード

今日mysqlトランザクションを試みて、トランザクションの中で全部で3つのテーブルを更新して、テーブルA、テーブルB、テーブルC
start transaction;
insert into A ...
insert into B...
insert into C...
rollback

ロールバックして表Bと表Cがロールバックしているのに気づきましたが、表Aがロールバックしていないのがおかしいです
Googleはinnodbエンジンだけがトランザクションをサポートしていることに気づきました.
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

そこで表Aの構造を見て
show create table A:
発見はmyisamの
...
ENGINE=MyISAM

テーブルAの代わりにinnodbのテーブルを新規作成すればよい