Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tối ưu hóa logic MySql

Vấn đề là bạn đang cố gắng sử dụng khóa cấp MySQL để đảm bảo rằng một vé không thể được chỉ định cho nhiều người. Bằng cách này, không có cách nào để phát hiện xem người dùng có khóa vé hay không.

Tôi sẽ triển khai khóa cấp ứng dụng bằng cách thêm 2 trường liên quan đến khóa vào bảng vé:dấu thời gian khi khóa được áp dụng và trường id người dùng cho bạn biết người dùng nào giữ khóa. Các trường liên quan đến khóa có thể được giữ trong một bảng khác (ví dụ:giỏ hàng có thể được sử dụng cho mục đích này).

Khi người dùng chọn một vé, sau đó bạn cố gắng cập nhật các trường khóa này bằng câu lệnh cập nhật có điều kiện:

update tickets
set lock_time=now(), lock_user=...
where ticket_id=... and lock_time is null

Giá trị thay cho ... được cung cấp bởi ứng dụng của bạn. lock_time is null có tiêu chí để đảm bảo rằng nếu vé đã được chọn bởi người dùng khác, thì người dùng sau đó không ghi đè khóa. Sau khi câu lệnh cập nhật, hãy kiểm tra số lượng hàng bị ảnh hưởng. Nếu đó là một, thì người dùng hiện tại đã có được khóa. Nếu nó là 0, thì người khác đã khóa vé.

Nếu bạn có dữ liệu khóa trong một bảng khác, thì hãy đặt một giới hạn duy nhất vào trường id vé trong bảng đó và sử dụng chèn để lấy khóa. Nếu việc chèn thành công, thì khóa sẽ được mua. Nếu nó không thành công, thì người dùng khác đã khóa vé.

Khóa thường được giữ trong một số phút, sau đó ứng dụng của bạn phải giải phóng khóa (đặt trường khóa thành trống hoặc xóa bản ghi khóa khỏi bảng khác).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi MySQL:Danh sách SELECT không nằm trong mệnh đề GROUP BY

  2. Định dạng ngày trong MySQL - khó chèn ngày

  3. Cấu hình của eclipselink + Spring MVC + MySql bằng cách sử dụng Cấu hình Java (Không có cấu hình XML)

  4. Làm thế nào để kiểm tra xem một biến có phải là NULL hay không, sau đó đặt nó bằng một thủ tục được lưu trữ trong MySQL?

  5. CHÈN BỎ QUA so với CHÈN ... TRÊN CẬP NHẬT KHÓA DUPLICATE