Hướng dẫn select for update skip locked mysql - chọn để cập nhật bỏ qua mysql bị khóa

MySQL 8.0.1 Giới thiệu hai tính năng mới cho phép bạn quản lý tốt hơn các tình huống mà bạn có các bảng có tranh chấp hàng nóng. & nbsp; Vấn đề này thường xuyên xuất hiện trong các kịch bản như chủ đề công nhân đều truy cập cùng một bảng cố gắng tìm công việc mới và các trang web thương mại điện tử đang cố gắng giữ số lượng hàng tồn kho chính xác.

Ví dụ của tôi cho ngày hôm nay sẽ cố gắng đặt vé vào một trò chơi khúc côn cầu.

Quá trình đặt phòng

Khi đặt vé vào trò chơi, tôi thường được nhắc lần đầu tiên chọn một phần của sân vận động nơi tôi muốn ngồi. & nbsp; Sau đó tôi có được một cái nhìn tổng quan đẹp, với những chỗ ngồi đã được thực hiện màu xám, những chiếc miễn phí trong Blue & NBSP; và những chỗ ngồi mà tôi hiện đang suy ngẫm về màu trắng. & nbsp; Tôi đảm bảo rằng trong hai phút tiếp theo, tôi sở hữu những chiếc ghế trắng:

Tôi hy vọng hệ thống đặt phòng sẽ đặt một chỗ ngồi tạm thời trên ghế của tôi trong khi tôi hoàn thành (hoặc từ bỏ) đơn đặt hàng của mình. & nbsp; Tương tự, vì tôi đang chọn chỗ ngồi của mình, tôi không mong đợi được hiển thị chỗ ngồi là một phần của việc giữ tạm thời cho người dùng khác:

Luôn luôn có thể quản lý điều này trong MySQL bằng cách có dữ liệu meta liên kết với mỗi ghế (bán, có sẵn, đang chờ xử lý) cũng như thời gian chờ khi có sẵn chỗ ngồi đang chờ xử lý. & nbsp; Nhưng bắt đầu với mysql 8.0.1 Có một cách tốt hơn (và dễ dàng hơn)

Giới thiệu bỏ qua khóa

Bắt đầu với MySQL 8.0.1, chúng tôi đang giới thiệu công cụ sửa đổi SKIP LOCKED có thể được sử dụng để đọc các hàng từ một bảng trong khi bỏ qua các hàng bị khóa. & nbsp; Điều này có thể được sử dụng bởi hệ thống đặt phòng của chúng tôi để bỏ qua các đơn đặt hàng đang chờ xử lý. & nbsp; ví dụ:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

CREATETABLEseats(TABLEseats(

& nbsp; & nbsp; seat_nointprimary key,seat_noINTPRIMARY KEY,

  bookedENUM('YES','NO')DEFAULT'NO'bookedENUM('YES','NO')DEFAULT'NO'

);

# Tạo 100 hàng mẫu

INSERTINTOseats(seat_no) INTOseats(seat_no)

WITHRECURSIVEmy_cteASRECURSIVEmy_cteAS

.

SELECT1ASn1ASn

Liên minh tất cả

SELECT1+nFROMmy_cteWHEREn1+nFROMmy_cteWHEREn

Chủ đề