問題が「この挿入は一意のキーに違反しました」のようなものである場合 "、コミットが実行されます。クエリがエラーを返したかどうかを確認する必要があります。エラーが返された場合は、ROLLBACK
。
たとえば、サーバーの予期しないシャットダウンが問題である場合、クエリ1と2は実行されません。
オフコース、ここでの3つのクエリは同じなので、これはばかげた例です。少なくともlid
を変更してください 見る。簡単なテストをしてみませんか?
編集:トランザクションの目的に関する質問を編集しました。
トランザクションの目的は、実際にデータベースを一貫した状態に保つことです。 (ACID を読んでください。 )、しかし、何が一貫しているかを決定するのはプログラマー次第です。 prodigitalsonの回答 をご覧ください あなたのためにこれを行うエラーキャッチの可能なphp-wayの例を見るために。ただし、トランザクションを実行している間、他のプロセスはトランザクションが行っている変更を認識しません。したがって、アトミックで分離されています。
CREATE TABLE `testkeys` (
`lid` INT,
`column_name` VARCHAR(50),
UNIQUE KEY `testuniq` (`lid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
BEGIN;
INSERT INTO testkeys(lid,column_name) VALUES(1,'test 1');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2');
INSERT INTO testkeys(lid,column_name) VALUES(3,'test 3');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2b');
COMMIT;