mysqlトランザクションのロールバックが不完全です
2197 ワード
今日mysqlトランザクションを試みて、トランザクションの中で全部で3つのテーブルを更新して、テーブルA、テーブルB、テーブルC
ロールバックして表Bと表Cがロールバックしているのに気づきましたが、表Aがロールバックしていないのがおかしいです
Googleはinnodbエンジンだけがトランザクションをサポートしていることに気づきました.
そこで表Aの構造を見て
show create table A:
発見はmyisamの
テーブルAの代わりにinnodbのテーブルを新規作成すればよい
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のテーブルを新規作成すればよい