Jika masalahnya seperti "Insert ini melanggar kunci unik ", komit akan dilakukan. Anda harus memeriksa sendiri apakah kueri mengembalikan kesalahan, dan jika demikian, ROLLBACK
.
Jika masalahnya adalah, misalnya, penghentian server yang tidak terduga, kueri 1 dan 2 tidak akan dilakukan.
Tentu saja, karena 3 kueri Anda di sini sama, ini adalah contoh konyol. Minimal ganti lid
untuk melihat. Mengapa Anda tidak melakukan tes cepat?
Edit:Anda mengedit pertanyaan Anda tentang tujuan transaksi.
Tujuan transaksi memang untuk menjaga database tetap konsisten (baca di ACID ), tetapi terserah programmer untuk memutuskan apa yang konsisten. Lihat jawaban prodigitalson untuk melihat contoh kemungkinan php-cara penangkapan kesalahan yang melakukan ini untuk Anda. Namun saat Anda melakukan transaksi, proses lain tidak akan melihat perubahan yang dilakukan transaksi Anda - karenanya atomik dan terisolasi.
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;