Hướng dẫn unlock table mysql - mở khóa bảng mysql
13.3.6 & nbsp; bảng khóa và câu lệnh bảng mở khóa
MySQL cho phép các phiên khách có được khóa bảng một cách rõ ràng cho mục đích hợp tác với các phiên khác để truy cập vào bảng hoặc để ngăn các phiên khác sửa đổi các bảng trong các giai đoạn khi phiên yêu cầu quyền truy cập độc quyền vào chúng. Một phiên có thể có được hoặc phát hành khóa chỉ cho chính nó. Một phiên không thể có được khóa cho phiên khác hoặc khóa phát hành do phiên khác nắm giữ. Khóa có thể được sử dụng để mô phỏng các giao dịch hoặc để có thêm tốc độ khi cập nhật các bảng. Điều này được giải thích chi tiết hơn trong các hạn chế và điều kiện khóa bàn.
1 có được một cách rõ ràng khóa bảng cho phiên khách hàng hiện tại. Khóa bàn có thể được thu thập cho các bảng cơ sở hoặc chế độ xem. Bạn phải có đặc quyền 1 và đặc quyền 3 cho mỗi đối tượng bị khóa.Để khóa xem, 1 sẽ thêm tất cả các bảng cơ sở được sử dụng trong chế độ xem vào tập hợp các bảng để được khóa và khóa chúng tự động. Đối với các bảng nằm dưới mọi chế độ xem đang bị khóa, 1 kiểm tra xem Chế độ xem Definer (đối với các lượt xem 6) hoặc Invoker (đối với tất cả các chế độ xem) có các đặc quyền thích hợp trên các bảng.Nếu bạn khóa một bảng một cách rõ ràng với 7, bất kỳ bảng nào được sử dụng trong các kích hoạt cũng bị khóa ngầm, như được mô tả trong các bảng khóa và bộ kích hoạt.Nếu bạn khóa một bảng một cách rõ ràng với 7, bất kỳ bảng nào liên quan đến ràng buộc khóa nước ngoài sẽ được mở và khóa ngầm. Đối với kiểm tra khóa nước ngoài, khóa chỉ đọc được chia sẻ ( 9) được thực hiện trên các bảng liên quan. Đối với các bản cập nhật xếp tầng, khóa ghi không chia sẻ ( 0) được thực hiện trên các bảng liên quan có liên quan đến hoạt động.
1 phát hành rõ ràng bất kỳ khóa bảng nào được tổ chức bởi phiên hiện tại. 1 ngầm phát hành bất kỳ khóa bảng nào được tổ chức bởi phiên hiện tại trước khi có được ổ khóa mới.Một cách sử dụng khác cho 1 là phát hành Khóa đọc toàn cầu có được với câu lệnh 4, cho phép bạn khóa tất cả các bảng trong tất cả các cơ sở dữ liệu. Xem Phần & NBSP; 13.7.8.3, Tuyên bố tuôn ra. (Đây là một cách rất thuận tiện để có được bản sao lưu nếu bạn có một hệ thống tệp như Veritas có thể chụp nhanh kịp thời.)Một khóa bảng chỉ bảo vệ chống lại các lần đọc hoặc ghi không phù hợp bởi các phiên khác. Một phiên giữ khóa 5 có thể thực hiện các hoạt động cấp bảng như 6 hoặc 7. Đối với các phiên giữ khóa 8, các hoạt động 9 và 7 không được phép.Các cuộc thảo luận sau đây chỉ áp dụng cho các bảng không phải là không. 7 được phép (nhưng bị bỏ qua) cho bảng 1. Bảng có thể được truy cập tự do bởi phiên trong đó nó được tạo, bất kể khóa nào khác có thể có hiệu lực. Không cần khóa là không cần thiết vì không có phiên nào khác có thể xem bảng.
Mua lại khóa bảngPhát hành khóa bảng Tương tác của khóa bảng và giao dịch Khóa bảng và kích hoạt
Phiên giữ khóa có thể đọc bảng (nhưng không viết nó).
Phiên giữ khóa có thể đọc và viết bảng. Nếu câu lệnh 1 phải chờ do khóa được giữ bởi các phiên khác trên bất kỳ bảng nào, nó sẽ chặn cho đến khi tất cả các khóa có thể được thu thập.Một phiên yêu cầu khóa phải có được tất cả các khóa mà nó cần trong một câu lệnh 1. Mặc dù các khóa thu được được giữ, phiên chỉ có thể truy cập các bảng bị khóa. Ví dụ: trong chuỗi câu lệnh sau, xảy ra lỗi đối với nỗ lực truy cập 8 vì nó không bị khóa trong câu lệnh 1:
Các bảng trong cơ sở dữ liệu 0 là một ngoại lệ. Chúng có thể được truy cập mà không bị khóa rõ ràng ngay cả khi một phiên giữ các khóa bảng thu được với 1.Bạn không thể tham khảo một bảng bị khóa nhiều lần trong một truy vấn bằng cùng tên. Thay vào đó, hãy sử dụng bí danh và có được một khóa riêng cho bảng và mỗi bí danh:
Lỗi xảy ra đối với 9 đầu tiên vì có hai tham chiếu đến cùng tên cho một bảng bị khóa. 9 thứ hai thành công vì các tham chiếu đến bảng sử dụng các tên khác nhau.Nếu các câu lệnh của bạn đề cập đến một bảng bằng bí danh, bạn phải khóa bảng bằng bí danh đó. Nó không hoạt động để khóa bảng mà không chỉ định bí danh:
Ngược lại, nếu bạn khóa một bảng bằng bí danh, bạn phải tham khảo nó trong các câu lệnh của mình bằng bí danh đó:
Phát hành khóa bảngKhi các khóa bảng được giữ bởi một phiên được phát hành, tất cả chúng đều được phát hành cùng một lúc. Một phiên có thể phát hành các khóa của nó một cách rõ ràng hoặc khóa có thể được phát hành ngầm trong một số điều kiện nhất định.
Nếu kết nối cho phiên máy khách chấm dứt, dù là bình thường hay bất thường, máy chủ ngầm sẽ giải phóng tất cả các khóa bảng do phiên (giao dịch và không chuyển hóa). Nếu khách hàng kết nối lại, các khóa không còn có hiệu lực. Ngoài ra, nếu máy khách có một giao dịch hoạt động, máy chủ sẽ quay lại giao dịch khi ngắt kết nối và nếu kết nối lại xảy ra, phiên mới bắt đầu với AutoCommit được bật. Vì lý do này, khách hàng có thể muốn vô hiệu hóa tự động kết nối lại. Có hiệu lực, tự động kết nối, máy khách không được thông báo nếu kết nối lại xảy ra nhưng bất kỳ khóa bảng hoặc giao dịch hiện tại nào đều bị mất. Với tự động kết nối lại bị vô hiệu hóa, nếu kết nối giảm, xảy ra lỗi đối với câu lệnh tiếp theo được đưa ra. Khách hàng có thể phát hiện lỗi và thực hiện hành động thích hợp như làm lại khóa hoặc làm lại giao dịch. Xem điều khiển kết nối lại tự động. Ghi chú Nếu bạn sử dụng 8 trên bàn bị khóa, nó có thể trở nên mở khóa. Ví dụ: nếu bạn thử hoạt động 8 thứ hai, kết quả có thể là lỗi 0 'không bị khóa với các bảng khóa. Để xử lý việc này, khóa bảng một lần nữa trước khi thay đổi thứ hai. Xem thêm Phần & NBSP; B.3.6.1, Các vấn đề với bảng thay đổi.
Tương tác của khóa bảng và giao dịch
1 và 2 Tương tác với việc sử dụng các giao dịch như sau:
Khóa bảng và kích hoạtNếu bạn khóa một bảng một cách rõ ràng với 01, bất kỳ bảng nào được sử dụng trong các kích hoạt cũng bị khóa ngầm:
Giả sử rằng bạn khóa hai bảng, 9 và 8, bằng cách sử dụng câu lệnh này:
Nếu 9 hoặc 8 có bất kỳ yếu tố kích hoạt nào, các bảng được sử dụng trong các kích hoạt cũng bị khóa. Giả sử rằng 9 có trình kích hoạt được xác định như thế này:
Kết quả của câu lệnh 1 là 9 và 8 bị khóa vì chúng xuất hiện trong câu lệnh và 12 và 13 bị khóa vì chúng được sử dụng trong kích hoạt:
Các hạn chế và điều kiện khóa bànBạn có thể sử dụng 23 một cách an toàn để chấm dứt một phiên đang chờ khóa bảng. Xem Phần & NBSP; 13.7.8.4, Tuyên bố giết người.
1 và 2 không thể được sử dụng trong các chương trình được lưu trữ.Các bảng trong cơ sở dữ liệu 26 không thể bị khóa với 01, ngoại trừ các bảng 28.Phạm vi của khóa được tạo bởi 1 là một máy chủ MySQL duy nhất. Nó không tương thích với cụm NDB, không có cách nào để thực thi khóa cấp SQL trên nhiều trường hợp của MySQLD. Thay vào đó, bạn có thể thực thi khóa trong một ứng dụng API. Xem Phần & NBSP; 23.2.7.10, Giới hạn liên quan đến nhiều nút cụm NDB, để biết thêm thông tin.mysqld. You can enforce locking in an API application instead. See
Section 23.2.7.10, “Limitations Relating to Multiple NDB Cluster Nodes”, for more information. Các tuyên bố sau đây bị cấm trong khi tuyên bố 1 có hiệu lực: 31, 32, 33, 34, và DDL về các chức năng và quy trình và sự kiện được lưu trữ.Đối với một số hoạt động, các bảng hệ thống trong cơ sở dữ liệu 35 phải được truy cập. Ví dụ: câu lệnh 36 yêu cầu nội dung của các bảng trợ giúp phía máy chủ và 37 có thể cần phải đọc các bảng múi giờ. Máy chủ ngầm khóa các bảng hệ thống để đọc khi cần thiết để bạn không cần phải khóa chúng một cách rõ ràng. Các bảng này được đối xử như vừa mô tả:
Nếu bạn muốn đặt khóa 5 một cách rõ ràng trên bất kỳ bảng nào trong số đó có câu lệnh 01, bảng phải là thứ duy nhất bị khóa; Không có bảng nào khác có thể được khóa với cùng một tuyên bố.Thông thường, bạn không cần phải khóa các bảng, vì tất cả các câu lệnh 40 là nguyên tử; Không có phiên nào khác có thể can thiệp vào bất kỳ câu lệnh SQL hiện đang thực hiện. Tuy nhiên, có một vài trường hợp khi khóa bảng có thể mang lại lợi thế:
Bạn có thể tránh sử dụng 1 trong nhiều trường hợp bằng cách sử dụng các bản cập nhật tương đối (____ 155 = ________ 156+________ 157) hoặc hàm 58.Bạn cũng có thể tránh khóa các bảng trong một số trường hợp bằng cách sử dụng các chức năng khóa tư vấn cấp người dùng 59 và 60.Các khóa này được lưu trong bảng băm trong máy chủ và được triển khai với 61 và 62 cho tốc độ cao.Xem Phần & NBSP; 12.15, Chức năng khóa.Xem Phần & NBSP; 8.11.1, Phương pháp khóa nội bộ, để biết thêm thông tin về chính sách khóa. |