Khóa bảng trong mysql là gì?

Tất cả các bảng đang mở trong bộ nhớ cache của bảng đều được liệt kê, nhưng cột IN_USE cho biết bảng đã bị khóa. Khi khóa đầu tiên được thực hiện, giá trị tăng lên 1. Các yêu cầu khóa tiếp theo sẽ bị chặn cho đến khi khóa ban đầu được giải phóng. Mỗi yêu cầu khóa bị chặn sẽ tăng bộ đếm hơn nữa, sao cho số lượng 5 đại diện cho khóa ban đầu và 4 khóa bị chặn

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 thống nhất, đú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, cũng như triển khai khái niệm và 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

Khóa bảng trong mysql là gì?

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 trong mysql là gì?
Khóa bảng trong mysql là gì?
Khóa bảng trong mysql là gì?
Khóa bảng trong mysql là gì?

Khóa bảng trong mysql là gì?
Khóa bảng trong mysql là gì?
Khóa bảng trong mysql là gì?
Khóa bảng trong mysql là gì?

Giá
Xem khóa học

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 (82.311 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 trong mysql là gì?

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 trong mysql là gì?

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 trong mysql là gì?

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 trong mysql là gì?

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ố

________số 8

đầu ra

Khóa bảng trong mysql là gì?

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 trong mysql là gì?

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ố

SHOW PROCESSLIST;

đầu ra

Khóa bảng trong mysql là gì?

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 name_of_table [READ | WRITE];0

đầu ra

Khóa bảng trong mysql là gì?

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 trong mysql là gì?

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 trong mysql là gì?

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 trong mysql là gì?

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 trong mysql là gì?

Sự 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 –

Khóa bảng trong cơ sở dữ liệu là gì?

Câu lệnh LOCK TABLE cho phép bạn lấy một cách rõ ràng khóa bảng dùng chung hoặc dành riêng trên bảng đã chỉ định . Khóa bảng kéo dài cho đến khi kết thúc giao dịch hiện tại. Để khóa bảng, bạn phải là chủ sở hữu cơ sở dữ liệu hoặc chủ sở hữu bảng.

Đ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.

Làm cách nào để biết bảng MySQL có bị khóa không?

Trong MySQL, các bảng bị khóa được xác định bằng cách sử dụng lệnh SHOW OPEN TABLES . Ở dạng đơn giản nhất là hiển thị tất cả các bảng bị khóa. Tất cả các bảng đang mở trong bộ nhớ cache của bảng đều được liệt kê, nhưng cột IN_USE cho biết bảng đã bị khóa. Khi khóa đầu tiên được thực hiện, giá trị tăng lên 1.