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

Hoạt động nguyên tử MySQL và khóa bảng

Bạn đang rất gần với thiết kế của mình, nhưng không hoàn toàn ở đó.

Trước hết, bảng sự kiện của bạn cần giữ số lượng vé còn trống cho sự kiện của bạn (ngoài bất kỳ vé nào bạn muốn ở đó).

Thứ hai, bảng ký quỹ của bạn cần có cột DATETIME cho biết thời điểm ký quỹ hết hạn. Bạn cần đặt giá trị đó bất cứ khi nào vé được ký quỹ.

Thứ ba, giao dịch đặt vé ký quỹ cần phải

  1. khóa hàng sự kiện.
  2. đọc cột vé có sẵn. (hủy bỏ nếu không có đủ)
  3. chèn một hàng trong bảng ký quỹ
  4. cập nhật hàng sự kiện để giảm bớt cột vé có sẵn.
  5. mở khóa hàng sự kiện.

Thứ tư, hành động hoàn tất việc bán hàng cần xóa hàng ký quỹ và chèn một hàng vé đã bán. Điều này không khó.

Thứ năm, bạn cần một hoạt động dọn dẹp ký quỹ. Điều này cần tìm kiếm tất cả các hàng ký quỹ đã hết hạn (có ngày hết hạn trong quá khứ) và cho từng hàng:

  1. khóa hàng sự kiện tương ứng.
  2. đọc số lượng vé ký quỹ từ bảng ký quỹ
  3. xóa hàng trong bảng ký quỹ.
  4. cập nhật hàng sự kiện để tăng cột vé có sẵn.
  5. mở khóa hàng sự kiện.

Bí quyết là có số lượng có sẵn vé được duy trì theo cách được lồng vào nhau một cách chính xác, do đó, các điều kiện đua giữa những người dùng không làm ảnh hưởng đến sự kiện của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql chuyển đổi từ UTC sang IST

  2. Khóa ngoại và phân vùng

  3. MySQL Tính tuổi theo năm tháng và ngày

  4. Cần trợ giúp với Truy vấn Mysql phân cấp

  5. Tôi có nên ping máy chủ mysql trước mỗi truy vấn không?