KHÓA bảng MySQL

Khi một 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 giải phóng

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 cách sử dụng lệnh show process list

Cách khóa bảng

Để 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à

mysql > BẢNG KHÓA 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

LOCK TABLES. diễn viên ĐỌC;

Khi bạn có bộ 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ẽ thất bại trừ khi bảng được mở khóa

CHÈN VÀO sakila. diễn viên(first_name, last_name, last_update) GIÁ TRỊ ('Xin chào', 'thế giới', ngày_hiện tại());

MySQL sẽ cung cấp cho bạn một lỗi đọc như

LỖI 1099 (HY000). Bảng 'diễn viên' đã bị khóa bằng khóa ĐỌC và không thể cập nhật

Cách mở khóa một bảng

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

mysql > MỞ KHÓA BẢNG;

Hiển thị các bảng đã khóa

Theo mặc định, không có cách dứt khoát nào bạn có thể truy vấn để hiển thị cho bảng bị khóa như. (HIỂN THỊ BẢNG ĐÃ KHÓA;)

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

sử dụng lệnh

HIỂN THỊ DANH SÁCH QUY TRÌNH;

Điều này sẽ kết xuất thông tin cũng như các truy vấn đang chờ khóa

KHÓA bảng MySQL

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

Phần kết luậ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 người dùng có bảng bị khóa trong cơ sở dữ liệu

Trong MySQL, chúng tôi có thể lưu trữ nhiều bảng và bản ghi trong đó theo yêu cầu của chúng tôi. Nội dung cơ sở dữ liệu này có thể được truy cập và thao tác đồng thời bởi nhiều người dùng khác nhau. Khi nhiều người dùng truy cập cùng một dữ liệu và hồ sơ, bạn phải đảm bảo rằng mỗi người trong số họ sẽ nhận được cùng một thông tin chính xác và phù hợp. Các thao tác chèn, cập nhật, xóa được thực hiện phù hợp, đúng thời điểm theo yêu cầu thao tác phát sinh để đảm bảo tính nhất quán, đúng đắn của nội dung cơ sở dữ liệu

Nói tóm lại, chúng ta phải đảm bảo rằng các hoạt động đọc và ghi được quản lý đúng cách để tránh bất kỳ sự không nhất quán nào trong cơ sở dữ liệu. MySQL cung cấp chức năng khóa các bảng cho thao tác đọc và ghi. Trong bài viết này, chúng ta sẽ tìm hiểu về hoạt động của khóa đọc, khóa ghi, cú pháp của chúng và triển khai khái niệm cũng như chức năng bằng một ví dụ

Bắt đầu khóa học khoa học dữ liệu miễn phí của bạn

Hadoop, Khoa học dữ liệu, Thống kê và những thứ khác

Khóa bảng

Khóa có thể được coi là cờ được duy trì đối với mọi bảng trong MySQL để quản lý quyền truy cập cơ sở dữ liệu khi nhiều phiên máy khách đang cố gắng sử dụng cùng một bảng tại cùng một thời điểm. MySQL cung cấp phương tiện cho mọi phiên máy khách để lấy bảng bằng cách khóa nó để ngăn các phiên máy khách khác sử dụng bảng đó cho đến khi phiên cụ thể đó hoàn thành với nhiệm vụ sử dụng bảng đó

Phiên máy khách chỉ có thể lấy hoặc giải phóng các ổ khóa trên bàn. Không phiên máy khách nào khác có thể lấy hoặc mở khóa trên bàn cho các phiên khác

Cú pháp khóa bảng

Khi chúng ta muốn áp dụng khóa trên một bảng thì chúng ta có thể sử dụng cú pháp sau –

Cú pháp #1

LOCK TABLE name_of_table [READ | WRITE];

Trong cú pháp trên, name_of_table là tên của bảng mà bạn muốn khóa và hơn nữa, bạn cần chỉ định loại khóa cho dù khóa được lấy cho thao tác ĐỌC hay VIẾT trên bảng đó

Trong trường hợp, bạn muốn lấy khóa trên nhiều bảng thì bạn có thể sử dụng cú pháp sau của câu lệnh LOCK TABLES, trong đó bạn cần chỉ định tên của các bảng và loại khóa mà bạn muốn lấy trên từng bảng.

Cú pháp #2

LOCK TABLES name_of_table1 [READ | WRITE],
name_of_table2 [READ | WRITE],
name_of_table3 [READ | WRITE],
.. ;

Cú pháp mở khóa bảng

Cú pháp mở khóa bảng mà phiên của bạn có được

Nếu bạn đã khóa một bảng cụ thể để thực hiện một số thao tác nhất định trên đó, bạn cần mở khóa để cho phép các bảng khác truy cập vào bảng đó. Để mở khóa, bạn có thể sử dụng cú pháp sau –

Cú pháp #3

UNLOCK TABLES;

Các ví dụ để triển khai Bảng khóa MySQL

Bây giờ chúng ta hãy thảo luận về hai loại khóa có thể mua được và nó đang hoạt động

Gói khoa học dữ liệu tất cả trong một(360+ khóa học, hơn 50 dự án)

KHÓA bảng MySQL
KHÓA bảng MySQL
KHÓA bảng MySQL
KHÓA bảng MySQL

KHÓA bảng MySQL
KHÓA bảng MySQL
KHÓA bảng MySQL
KHÓA bảng MySQL

Giá bán
Xem các khóa học

Hơn 360 khóa học trực tuyến. hơn 50 dự án. Hơn 1500 giờ. Giấy chứng nhận có thể kiểm chứng. Truy cập trọn đời
4. 7 (85.134 xếp hạng)

1. Đọc khóa

Nhiều phiên máy khách có thể có được khóa ĐỌC trên bàn đồng thời. Ngay cả những phiên không có khóa trên bảng đó cũng có thể đọc nội dung của bảng đó mà không cần phải có khóa trên bảng đó. Khi một phiên cụ thể có được khóa ĐỌC thì chỉ có thể thực hiện thao tác đọc trên bảng đó và bạn không thể thao tác nội dung của bảng đó bằng cách thực hiện bất kỳ thao tác ghi nào trên bảng đó

Ngoài ra, nếu bất kỳ phiên máy khách nào khác muốn ghi dữ liệu vào bảng đó thì hoạt động của chúng sẽ được đưa vào trạng thái chờ và chỉ có thể được thực hiện khi khóa đọc trên bảng đó được giải phóng. Tại thời điểm kết thúc phiên cho dù kết thúc là bình thường hay bất thường, tất cả các khóa thu được trên tất cả các bảng đọc cũng như kiểu VIẾT đều được giải phóng

Hãy để chúng tôi tạo một bảng có tên là giáo dục bằng cách sử dụng câu lệnh truy vấn sau –

Mã số

CREATE TABLE `educba_writers` (
`id` int(11) PRIMARY KEY,
`firstName` varchar(10) COLLATE latin1_danish_ci NOT NULL,
`rate` decimal(5,2) DEFAULT NULL,
`joining_date_time` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci;

đầu ra

KHÓA bảng MySQL

Hãy để chúng tôi chèn một số bản ghi trong đó -

Mã số

INSERT INTO `educba_writers` (`id`, `firstName`, `rate`, `joining_date_time`) VALUES
(1, 'Payal', '750.00', '2020-05-28 16:02:34'),
(2, 'Vyankatesh', '700.00', '2020-05-29 16:13:19'),
(3, 'Omprakash', '600.00', '2020-05-28 20:32:50'),
(4, 'Parineeta', '980.00', '2020-05-28 13:35:11');

đầu ra

KHÓA bảng MySQL

Trước khi chúng tôi lấy READ LOCK trên bảng educba_writers, nếu chúng tôi muốn biết id kết nối phiên cơ sở dữ liệu hiện tại của chúng tôi thì chúng tôi có thể sử dụng câu lệnh sau –

Mã số

SELECT CONNECTION_ID();

đầu ra

KHÓA bảng MySQL

Bây giờ, chúng ta sẽ sử dụng câu lệnh sau để lấy khóa trên bảng educba_writers –

Mã số

LOCK TABLE educba_writers READ;

đầu ra

KHÓA bảng MySQL

Bây giờ, nếu chúng tôi cố gắng thực hiện thao tác CHÈN, CẬP NHẬT hoặc XÓA trên bảng người viết giáo dục bằng cách sử dụng phiên hiện tại hoặc bất kỳ phiên nào khác thì nó sẽ phát sinh lỗi. Xem xét việc thực hiện tuyên bố sau -

Mã số

INSERT INTO `educba_writers` (`id`, `firstName`, `rate`, `joining_date_time`) VALUES
(5, 'Pihu', '750.00', '2020-05-28 16:02:34');

đầu ra

KHÓA bảng MySQL

Nếu bạn cố kích hoạt cùng một truy vấn từ một phiên khác, nó sẽ chuyển sang trạng thái chờ như hình bên dưới –

KHÓA bảng MySQL

Bạn có thể xác nhận điều đó bằng cách xem danh sách quy trình như sau –

Mã số

________số 8_______

đầu ra

KHÓA bảng MySQL

2. Viết khóa

Khi khóa VIẾT được lấy bởi một phiên nhất định thì chỉ phiên đó mới có thể thực hiện các thao tác đọc và ghi trên bảng đó cho đến khi khóa không được giải phóng. Các phiên khác không thể đọc hoặc ghi bảng vào bảng đó khi nó bị khóa ghi. Hãy viết bảng khóa educba_writers –

Mã số

LOCK TABLE educba_writers WRITE;

đầu ra

KHÓA bảng MySQL

Hãy để chúng tôi thực hiện thao tác chèn và kiểm tra kết quả –

Mã số

LOCK TABLES name_of_table1 [READ | WRITE],
name_of_table2 [READ | WRITE],
name_of_table3 [READ | WRITE],
.. ;
0

đầu ra

KHÓA bảng MySQL

Chèn hoặc thao tác từ các phiên khác sẽ dẫn đến việc đợi cho đến khi khóa được giải phóng

Mã số

LOCK TABLES name_of_table1 [READ | WRITE],
name_of_table2 [READ | WRITE],
name_of_table3 [READ | WRITE],
.. ;
1

đầu ra

KHÓA bảng MySQL

3. Mở khóa bảng

Hãy để chúng tôi mở khóa các bảng bằng cách sử dụng câu lệnh sau -

Mã số

UNLOCK TABLES;

đầu ra

KHÓA bảng MySQL

Bạn có thể quan sát thấy rằng ngay sau khi khóa trên các bảng từ phiên hiện tại được giải phóng, truy vấn chèn sẽ được thực thi mà chúng tôi đã kích hoạt trong một phiên khác –

đầu ra

KHÓA bảng MySQL

Phần kết luận

Chúng ta có thể có được các khóa đọc trên các bảng của MySQL, còn được gọi là các khóa dùng chung để ngăn chặn bất kỳ phiên nào có được khóa ghi trên bảng. Chúng ta có thể sử dụng khóa ghi còn được gọi là khóa độc quyền vì không có phiên nào khác có thể thực hiện các thao tác đọc và ghi trên bảng ngoài phiên hiện tại

Bài viết được đề xuất

Đây là hướng dẫn về Bảng khóa MySQL. Ở đây chúng tôi thảo luận về phần giới thiệu về Bảng khóa MySQL, cú pháp, cách nó hoạt động với các ví dụ tương ứng. Bạn cũng có thể xem qua các bài viết liên quan khác của chúng tôi để tìm hiểu thêm –

Làm cách nào để khóa một bảng trong MySQL?

Cú pháp KHÓA BẢNG/MỞ KHÓA BẢNG .
Sắp xếp tất cả các bảng để khóa theo thứ tự được xác định nội bộ (từ quan điểm của người dùng, thứ tự không được xác định)
Nếu một bảng bị khóa bằng khóa đọc và khóa ghi, hãy đặt khóa ghi trước khóa đọc
Khóa một bảng tại một thời điểm cho đến khi luồng nhận được tất cả các khóa

Việc sử dụng bảng khóa là gì?

Câu lệnh LOCK TABLE ngăn các quá trình ứng dụng đồng thời sử dụng hoặc thay đổi bảng . Khóa được giải phóng khi đơn vị công việc đưa ra câu lệnh LOCK TABLE cam kết hoặc chấm dứt.

Làm cách nào để khóa tất cả các bảng trong MySQL?

Để khóa một bảng bằng Câu lệnh MySQL LOCK TABLES, bạn cần có các đặc quyền TABLE LOCK và SELECT . READ LOCK - Nếu bạn áp dụng khóa này trên một bảng, các thao tác ghi trên đó sẽ bị hạn chế. tôi. e. , chỉ những phiên giữ khóa mới có thể ghi vào bảng này.

Điều gì gây ra khóa bảng trong MySQL?

Khóa bảng gây ra sự cố khi phiên đang chờ do ổ đĩa đầy và cần phải có dung lượng trống trước khi phiên có thể tiếp tục . Trong trường hợp này, tất cả các phiên muốn truy cập bảng sự cố cũng được đặt ở trạng thái chờ cho đến khi có thêm dung lượng ổ đĩa.