Cách tìm ra người dùng nào đang khóa bảng trong MySQL

Tác giả NetworkEngineer, T.Một 21, 2022, 10:59:46 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách tìm ra người dùng nào đang khóa bảng trong MySQL


Khóa MySQL đề cập đến một cờ khóa được kết nối với một bảng. Công dụng chính của khóa MySQL là trong các phiên người dùng để ngăn các phiên người dùng khác truy cập vào bảng trong một phiên hoạt động. Một phiên MySQL cụ thể chỉ có thể truy cập các khóa của nó chứ không phải các khóa được liên kết với các máy khách khác.

Khi bảng bị khóa trong một phiên cụ thể, các phiên khác không thể đọc hoặc ghi vào bảng trừ khi khóa từ phiên được giải phóng. Do đó, tất cả các phiên khác đang ở chế độ chờ cho đến khi khóa được phát hành.

Hướng dẫn ngắn này sẽ chỉ cho bạn cách hiển thị các khóa có sẵn bằng lệnh hiển thị danh sách tiến trình.

1. Cách khóa một bảng trong MySQL

Để có được trạng thái khóa trên một bảng cụ thể, bạn có thể sử dụng câu lệnh LOCK TABLES. Cú pháp chung để khóa bảng là:

Mã nguồn [Chọn]
mysql > LOCK TABLES tb_name [LOCK_TYPE]
Trong loại khóa, bạn có thể chỉ định khóa ĐỌC hoặc ĐỌC. Ví dụ dưới đây đặt khóa WRITE trên bảng diễn viên.

Mã nguồn [Chọn]
LOCK TABLES sakila.actor READ;
Sau khi bạn có ổ khóa, tất cả các phiên khác sẽ không cập nhật bất kỳ dữ liệu nào được lưu trữ trong bảng.

Ví dụ, câu lệnh sau sẽ không thành công trừ khi bảng được mở khóa.

Mã nguồn [Chọn]
INSERT INTO sakila.actor(first_name, last_name, last_update) VALUES ('Hello', 'world', current_date());
MySQL sẽ cung cấp cho bạn một lỗi đọc là:

Mã nguồn [Chọn]
ERROR 1099 (HY000): Table 'actor' was locked with a READ lock and can't be updated
2. Cách mở khóa một bảng

Để mở khóa bảng, hãy sử dụng truy vấn UNLOCK TABLES như sau:

Mã nguồn [Chọn]
mysql > UNLOCK TABLES;
3. Hiển thị các bảng đã khóa

Theo mặc định, không có cách nào chắc chắn bạn có thể truy vấn để hiển thị cho bảng bị khóa như: SHOW LOCKED TABLES;

Tuy nhiên, chúng ta có thể sử dụng lệnh danh sách xử lý để hiển thị các bảng bị khóa và người dùng.

Sử dụng lệnh sau đây:

Mã nguồn [Chọn]
SHOW PROCESSLIST;
Thao tác này sẽ kết xuất thông tin cũng như các truy vấn đang chờ khóa.


Ví dụ trên cho thấy người dùng root khóa bảng trong bảng diễn viên.

Hướng dẫn ngắn này đã chỉ cho bạn cách khóa và mở khóa bảng cũng như xem những người dùng có bảng bị khóa trong cơ sở dữ liệu MySQL.