MySQL đặt bảng khóa

Trên thực tế, việc sử dụng

mysql-1> create table a [id int not null primary key] engine=innodb;
Query OK, 0 rows affected [0.02 sec]

mysql-1> insert into a [id] values [1], [2], [3];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Duplicates: 0  Warnings: 0
6 với InnoDB có hiệu quả và có thể được chứng minh bằng hai phiên bản MySQL CLI được kết nối với cùng một máy chủ [ký hiệu là
mysql-1> create table a [id int not null primary key] engine=innodb;
Query OK, 0 rows affected [0.02 sec]

mysql-1> insert into a [id] values [1], [2], [3];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Duplicates: 0  Warnings: 0
7 và
mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
0] trong ví dụ bên dưới. Nó thường nên tránh trong bất kỳ loại bối cảnh sản xuất nào vì tác động đến khách hàng, nhưng đôi khi nó có thể là lựa chọn duy nhất

Tạo một bảng và điền vào đó một số dữ liệu

mysql-1> create table a [id int not null primary key] engine=innodb;
Query OK, 0 rows affected [0.02 sec]

mysql-1> insert into a [id] values [1], [2], [3];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Duplicates: 0  Warnings: 0

Khóa bàn

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]

Hãy thử chèn từ

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
0, nó sẽ treo chờ trên ổ khóa

mysql-2> insert into a [id] values [4];

Bây giờ mở khóa bảng từ

mysql-1> create table a [id int not null primary key] engine=innodb;
Query OK, 0 rows affected [0.02 sec]

mysql-1> insert into a [id] values [1], [2], [3];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Duplicates: 0  Warnings: 0
7

mysql-1> unlock tables;
Query OK, 0 rows affected [0.00 sec]

Và cuối cùng

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
0 bỏ chặn và trả lại

Query OK, 1 row affected [6.30 sec]

2. Sử dụng phpMyAdmin để thử nghiệm

Phương pháp thử nghiệm của bạn bằng cách sử dụng phpMyAdmin không hợp lệ vì phpMyAdmin không duy trì kết nối liên tục đến máy chủ giữa các truy vấn từ giao diện web của nó. Để sử dụng bất kỳ loại khóa nào

mysql-1> create table a [id int not null primary key] engine=innodb;
Query OK, 0 rows affected [0.02 sec]

mysql-1> insert into a [id] values [1], [2], [3];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Duplicates: 0  Warnings: 0
6,
mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
5, v.v. , bạn cần duy trì kết nối trong khi khóa được giữ

3. Khóa tất cả các bảng cần thiết trong quá trình làm việc

Cách mà MySQL khóa các bảng, một khi bạn đã sử dụng

mysql-1> create table a [id int not null primary key] engine=innodb;
Query OK, 0 rows affected [0.02 sec]

mysql-1> insert into a [id] values [1], [2], [3];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Duplicates: 0  Warnings: 0
6 để khóa rõ ràng bất kỳ thứ gì, bạn sẽ không thể truy cập bất kỳ bảng nào khác không bị khóa rõ ràng trong thời gian
mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
7. phiên họp
mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
8. Trong ví dụ trên của bạn, bạn cần sử dụng

mysql-1> create table a [id int not null primary key] engine=innodb;
Query OK, 0 rows affected [0.02 sec]

mysql-1> insert into a [id] values [1], [2], [3];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Duplicates: 0  Warnings: 0
1

[Tôi cho rằng

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
9 được sử dụng trong phần chọn phụ không phải là lỗi đánh máy. ]

4. Trao đổi bảng nguyên tử bằng cách sử dụng

mysql-2> insert into a [id] values [4];
0

Ngoài ra, tôi nên lưu ý rằng việc thay thế bảng hiện có bằng cách sử dụng

mysql-2> insert into a [id] values [4];
1 theo sau bởi
mysql-2> insert into a [id] values [4];
0 sẽ gây ra một khoảnh khắc ngắn khi bảng không tồn tại và điều này có thể gây nhầm lẫn cho các khách hàng mong đợi bảng đó tồn tại. Nói chung là tốt hơn nhiều để làm

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

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
1

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

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
2

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

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
3

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]

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 [83.154 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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
4

đầu ra

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

Mã số

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
5

đầu ra

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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
6

đầu ra

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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
7

đầu ra

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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
8

đầu ra

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 –

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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
9

đầu ra

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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
0

đầu ra

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

Mã số

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
20

đầu ra

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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
21

đầu ra

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ố

mysql-1> lock tables a write;
Query OK, 0 rows affected [0.00 sec]
3

đầu ra

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

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 –

MySQL SELECT có khóa bảng không?

MySQL sử dụng khóa bảng [thay vì khóa hàng hoặc khóa cột] trên tất cả các loại bảng, ngoại trừ bảng InnoDB và BDB , để đạt được tốc độ khóa rất cao.

MySQL có thêm bảng khóa cột không?

MySQL sử dụng khóa bảng [thay vì khóa trang, hàng hoặc cột] cho tất cả các công cụ lưu trữ ngoại trừ InnoDB . Bản thân các hoạt động khóa không có nhiều chi phí.

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

Bàn 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.

Chủ Đề