Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL InnoDB - Nhầm lẫn về giao dịch

Nếu sự cố xảy ra như " Nội dung chèn này đã vi phạm khóa duy nhất ", quá trình cam kết sẽ diễn ra. Bạn phải tự kiểm tra xem truy vấn có trả lại lỗi không và nếu có, ROLLBACK .

Nếu sự cố xảy ra, chẳng hạn như máy chủ bị tắt đột ngột, các truy vấn 1 và 2 sẽ không diễn ra.

Nói cách khác, vì 3 truy vấn của bạn ở đây giống nhau, đây là một ví dụ ngớ ngẩn. Ít nhất là thay đổi lid nhìn. Tại sao bạn không làm một bài kiểm tra nhanh?

Chỉnh sửa:bạn đã chỉnh sửa câu hỏi của mình về mục đích giao dịch.

Mục đích của các giao dịch thực sự là giữ cho cơ sở dữ liệu ở trạng thái nhất quán (đọc trên ACID ), nhưng người lập trình quyết định điều gì là nhất quán. Xem câu trả lời của thần đồng để xem ví dụ về cách bắt lỗi php có thể thực hiện điều này cho bạn. Nhưng khi bạn đang tham gia một giao dịch, các quy trình khác sẽ không nhìn thấy những thay đổi mà giao dịch của bạn đang thực hiện - do đó nguyên tử và bị cô lập.

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. Sử dụng 'LIKE' với kết quả của một truy vấn con SQL

  2. cách sử dụng LINQ to SQL với mySQL

  3. PHP / MySQLi:ĐẶT lc_time_names và DATE_FORMAT () vào một truy vấn mysqli?

  4. If else trên mệnh đề WHERE

  5. Làm cách nào để đếm giá trị NULL trong MySQL?