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

MySQL AUTO_INCREMENT không ROLLBACK

Nó không thể hoạt động theo cách đó. Cân nhắc:

  • chương trình một, bạn mở một giao dịch và chèn vào bảng FOO có khóa chính tự động tăng (tùy ý, chúng tôi nói rằng nó nhận được 557 cho giá trị khóa của nó).
  • Chương trình hai bắt đầu, nó mở một giao dịch và chèn vào bảng FOO nhận được 558.
  • Lập trình hai phần chèn vào bảng BAR có một cột là khóa ngoại của FOO. Vì vậy, bây giờ 558 được đặt ở cả FOO và BAR.
  • Chương trình hai hiện đã cam kết.
  • Chương trình ba bắt đầu và tạo báo cáo từ bảng FOO. Bản ghi 558 đã được in.
  • Sau đó, chương trình một sẽ quay trở lại.

Làm cách nào để cơ sở dữ liệu lấy lại giá trị 557? Nó có đi vào FOO và giảm tất cả các khóa chính khác lớn hơn 557 không? Làm thế nào để nó sửa chữa BAR? Làm cách nào để xóa số 558 được in trên ba đầu ra của chương trình báo cáo?

Số thứ tự của Oracle cũng độc lập với các giao dịch vì lý do tương tự.

Nếu bạn có thể giải quyết vấn đề này trong thời gian liên tục, tôi chắc chắn rằng bạn có thể kiếm được nhiều tiền trong lĩnh vực cơ sở dữ liệu.

Bây giờ, nếu bạn có yêu cầu rằng trường tăng tự động của bạn không bao giờ có khoảng trống (ví dụ:cho mục đích kiểm tra). Sau đó, bạn không thể khôi phục các giao dịch của mình. Thay vào đó, bạn cần có cờ trạng thái trên hồ sơ của mình. Trong lần chèn đầu tiên, trạng thái của bản ghi là "Chưa hoàn thành", sau đó bạn bắt đầu giao dịch, thực hiện công việc của mình và cập nhật trạng thái để "cạnh tranh" (hoặc bất cứ điều gì bạn cần). Sau đó, khi bạn cam kết, bản ghi sẽ hoạt động. Nếu giao dịch quay trở lại, bản ghi chưa hoàn chỉnh vẫn ở đó để kiểm tra. Điều này sẽ khiến bạn đau đầu nhiều thứ khác nhưng là một cách để đối phó với những lối mòn trong quá trình kiểm toá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. Tìm các giá trị trùng lặp trong MySQL

  2. Tăng tốc độ đếm hàng trong MySQL

  3. Các thủ tục được lưu trữ trong MySQL sử dụng chúng hoặc không sử dụng chúng

  4. Bật ghi nhật ký truy vấn chậm (Nhật ký truy vấn chậm) trong Cơ sở dữ liệu MySQL

  5. PDOException SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục nào như vậy