mysql innodb トランザクションでは、重複キー エラーによってロールバックが発生すると予想されます。そうではなく、単純にエラーをスローして次のコマンドに進みます。COMMIT コマンドに到達すると、トランザクションはコミットされ、重複キーの原因となるコマンドは削除されます。
これは予想される動作ですか?もしそうなら、そのようなエラーが発生したときにトランザクションがコミットされるのではなくロールバックされるように設定するにはどうすればよいでしょうか?
テスト環境:
CREATE TABLE `test` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
BEGIN;
INSERT INTO test VALUES (5);
INSERT INTO test VALUES (5);
COMMIT;
期待される結果: テーブルtest
は空です
実際の結果: テーブルtest
には値が 5 のレコードが 1 つ含まれます