Giả sử tôi có hai người dùng đang cố gắng truy cập vào bảng trong cơ sở dữ liệu được gọi là "nhận xét" theo thứ tự sau:Làm rõ sự khác biệt giữa khóa cấp hàng trong công cụ InnoDB và khóa bảng ở động cơ MyISAM trong cơ sở dữ liệu MySQL
User1 được xây dựng và cập nhật cho một kỷ lục với id = 10
cẬP NHẬT comments SET comment = "Hello World" WHERE id = 10
User2 đang thực hiện một lựa chọn cho tất cả các hàng của cùng một bảng bình luận
SELECT * FROM comments
tôi muốn thảo luận về sự khác biệt giữa các trường hợp sau:
- Nếu động cơ của bảng là MyISAM: truy vấn Update sẽ khóa toàn bộ bảng mà sẽ xếp hàng truy vấn chọn cho đến khi cập nhật của hàng được hoàn thành và sau đó nó sẽ được thực hiện sẽ dừng bất kỳ người dùng yêu cầu bất cứ điều gì từ bảng này cho đến khi cập nhật là hoàn tất.
- Nếu động cơ của bảng là InnoDB: truy vấn cập nhật sẽ khóa hàng được cập nhật.
TÔI MUỐN BIẾT LÀM THẾ NÀO KHÓA KHÓA NÀY CÓ HIỆU QUẢ ???
Ý tôi là nếu chọn yêu cầu cơ sở dữ liệu cho toàn bộ bản ghi của bảng nhận xét và tìm thấy một trong số chúng (id = 10) bị khóa thì cơ sở dữ liệu sẽ xếp hàng truy vấn chọn một lần nữa cho đến khi cập nhật xong?
Nếu có thì sự khác biệt giữa hai công cụ là gì ??
Nếu không, tôi muốn nói rằng tôi có tình huống tương tự ở trên trang web của mình và thậm chí tôi đã thay đổi công cụ bảng từ MyISAM thành InnoDB nhưng vấn đề xếp hàng bất kỳ yêu cầu nào khi có cập nhật hoặc truy vấn chèn vẫn xảy ra.
Mọi giải thích cho tình huống này sẽ hữu ích. cảm ơn bạn trước
Trong ví dụ của bạn, lựa chọn phải chờ cập nhật để hoàn thành cho cả hai công cụ. Nó sẽ khác nếu truy vấn chọn không bao gồm bản ghi có ID 10 (được khóa bởi bản cập nhật), trong trường hợp này lựa chọn MyISAM phải đợi, nhưng InnoDB thì không. "Tính năng này trong InnoDB được gọi là đồng thời" - http://stackoverflow.com/a/28070969/934739 –