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

Làm thế nào để cố tình khóa một hàng MySQL mà ngay cả SELECT sẽ trả về một lỗi?

Nếu bạn đặt mức cô lập giao dịch thành SERIALIZABLE , InnoDB wil imp —— append LOCK IN SHARE MODE cho tất cả SELECT tuyên bố.

Chế độ này xung đột với các ổ khóa được đặt bởi SELECT FOR UPDATESELECT s sẽ khóa.

Tuy nhiên, lưu ý rằng InnoDB có thể khóa nhiều hàng hơn là đáp ứng WHERE điều kiện. Điều này là do nó khóa tất cả các hàng đã quét , không chỉ những người phù hợp .

Giả sử, bạn có một chỉ mục trên col1 và truy vấn này:

SELECT  *
FROM    mytable
WHERE   col1 = 1
        AND col2 = 2
FOR UPDATE

sử dụng chỉ mục này.

Điều này sẽ khóa tất cả bản ghi có col1 = 1 , ngay cả những người có col2 <> 2



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu trữ địa chỉ IP trong cơ sở dữ liệu MySQL (IPv4 VÀ IPv6)

  2. Cách di chuyển MySQL từ Amazon EC2 sang Trung tâm dữ liệu tại chỗ của bạn mà không có thời gian ngừng hoạt động

  3. Làm thế nào để viết một (MySQL) LIMIT trong SQL Server?

  4. Làm cách nào để chọn toàn bộ hàng có ID lớn nhất trong bảng?

  5. Hai cột autoincrements hoặc autoincrement và cùng một giá trị trong cột khác