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

Cam kết và giao dịch MySQL

Trong InnoDB, bạn không cần phải bắt đầu hoặc kết thúc các giao dịch một cách rõ ràng cho các truy vấn đơn lẻ nếu bạn chưa thay đổi cài đặt mặc định của tự động gửi, là "bật". Nếu bật tính năng autocommit, InnoDB sẽ tự động bao gồm mọi truy vấn SQL đơn lẻ trong một giao dịch, tương đương với START TRANSACTION; query; COMMIT; .

Nếu bạn sử dụng rõ ràng START TRANSACTION trong InnoDB với tính năng tự động gửi, sau đó bất kỳ truy vấn nào được thực thi sau START TRANSACTION câu lệnh hoặc tất cả sẽ được thực thi, hoặc tất cả chúng sẽ không thành công. Điều này hữu ích trong môi trường ngân hàng, ví dụ:nếu tôi đang chuyển 500 đô la vào tài khoản ngân hàng của bạn, thì thao tác đó chỉ thành công nếu số tiền đã được trừ khỏi số dư ngân hàng của tôi và được cộng vào tài khoản của bạn. Vì vậy, trong trường hợp này, bạn sẽ chạy một cái gì đó giống như

START TRANSACTION;
UPDATE customers SET balance = balance - 500 WHERE customer = 'Daan';
UPDATE customers SET balance = balance + 500 WHERE customer = 'Dennis';
COMMIT;

Điều này đảm bảo rằng cả hai truy vấn sẽ chạy thành công hoặc không có, nhưng không phải chỉ một. Bài đăng này có thêm một số thông tin về thời điểm bạn nên sử dụng các giao dịch.

Trong InnoDB, bạn sẽ rất hiếm khi phải khóa toàn bộ bảng; InnoDB, không giống như MyISAM, hỗ trợ khóa mức hàng. Điều này có nghĩa là các máy khách không phải khóa toàn bộ bảng, buộc các máy khách khác phải đợi. Máy khách chỉ nên khóa các hàng mà họ thực sự cần, cho phép các máy khách khác tiếp tục truy cập các hàng họ cần.

Bạn có thể đọc thêm về giao dịch InnoDB tại đây . Câu hỏi của bạn về deadlock được giải đáp trong phần 14.2.8.8 14.2.8.9 của tài liệu. Nếu một truy vấn không thành công, trình điều khiển MySQL của bạn sẽ trả về một thông báo lỗi cho biết lý do; ứng dụng của bạn sau đó sẽ phát hành lại các truy vấn nếu được yêu cầu.

Cuối cùng, trong mã mẫu của bạn, bạn đã sử dụng mysql_query . Nếu bạn đang viết mã mới, vui lòng ngừng sử dụng mysql_ cũ, chậm và không được dùng nữa thư viện cho PHP và sử dụng mysqli_ hoặc PDO thay thế :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Độ dài tối đa cho văn bản kiểu MySQL

  2. chọn từ một bảng, đếm từ một bảng khác có id được liên kết

  3. Hàm MySQL DEGREES () - Chuyển đổi từ Radian sang Độ

  4. Hiệu suất chèn hàng loạt JDBC

  5. Làm cách nào tôi có thể CHỌN các hàng tương tự trong hai bảng khác nhau trong MySQL (Có thể không?)