Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL InnoDB - Bingung tentang transaksi

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Meningkatkan Kinerja tanpa Cache

  2. Bagaimana cara mendapatkan hitungan setiap nilai berbeda dalam kolom?

  3. cara memilih 2 tabel seperti ini

  4. MySql menyiapkan pernyataan - apakah mungkin untuk memparametrikan nama kolom atau nama fungsi?

  5. Laravel Eloquent membandingkan tanggal dari bidang datetime