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

INSERT IGNORE có khóa bảng ngay cả khi nó bỏ qua phần chèn không?

Nó phụ thuộc vào công cụ - MyIsam và InnoDb hoạt động khác nhau.

Đối với bảng MyIsam, nếu một bản ghi đã tồn tại trong bảng (ngay cả khi nó chưa được cam kết), một INSERT thông thường của cùng một bản ghi ( cùng một khóa duy nhất) trong phiên khác báo cáo lỗi khóa song mã - vì vậy INSERT IGNORE chỉ cần bỏ qua lỗi và tiếp tục.

Trên bảng InnoDB, nếu bản ghi không bị khóa, INSERT thông thường sẽ ngay lập tức báo cáo lỗi khóa trùng lặp (INSERT IGNORE sẽ bỏ qua lỗi và tiếp tục).
Nhưng nếu bản ghi bị khóa bởi phiên khác (ví dụ:bản ghi được chèn nhưng chưa được cam kết hoặc bản ghi bị khóa bởi một Lệnh UPDATE hoặc DELETE hoặc SELECT FOR UPDATE), lệnh INSERT sẽ "treo" và chờ đến phiên khác sẽ gỡ khóa (bằng COMMIT hoặc ROLLBACK). Sau đó, nếu bản ghi vẫn tồn tại sau khi loại bỏ khóa, INSERT sẽ thông báo lỗi (INSERT IGNORE sẽ bỏ qua lỗi), nhưng nếu bản ghi không tồn tại, INSERT sẽ thêm bản ghi này vào bảng.

Từ khóa IGNORE chỉ cho biết "trong trường hợp có bất kỳ lỗi nào, hãy bỏ qua nó và tiếp tục", nhưng nó không ảnh hưởng đến hành vi khóa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt hàng Chọn dựa trên kết quả tham gia (Sắp xếp cuộc trò chuyện theo tin nhắn cuối cùng được gửi)

  2. Nhận ngày đầu tiên và ngày cuối cùng của tháng tới trong MySQL

  3. Làm thế nào để phân trang trong khi UNION được sử dụng trong MySQL?

  4. JDBC trả về MySQLSyntaxError Exception với câu lệnh đúng

  5. tăng hiệu suất trên một truy vấn SELECT với tập dữ liệu điểm 3D lớn