Transcation là 1 nhóm các câu lệnh sql được xử lý tuần tự nhưng được xem là 1 thao tác duy nhất.
ví dụ. trong 1 nhóm câu lệnh có 1 lệnh xử lý không thành công thì transcation sẽ ko thành công
storage là Inodb : sẽ thiết lập transcation
1 số vị dụ thực tế cần sử dụng transcation
: ví dụ khi rút tiền hệ thống đã trừ tiền nhưng chưa trả tiền
hoặc khi mua 1 đơn hàng qua paypal số tiền trong tk bị trừ nhưng trạng thái trả tiền lại chưa...
A chuyển tiền cho B, A bị trừ tiền rồi, đang cập nhật tiền mới cho B thì mất điện.
Thuộc tính
+ Tính cô lập : các transcation hoạt động độc lập nhâu. ví dụ transcation của máy này sẽ hoạt động sẽ không ảnh hưởng tới máy khác
+Tính bền vững. : đảm bảo kết quả hoặc tác động của transcation luôn tồn tại cho dù hệ thống có bị lỗi
+Tính nhất quán : đảm bảo tất cả csd sẽ được thay đổi khi hoàn thành xong transcation
+ Tính tự trị
MỘT SỐ LƯU Ý KHI SỬ DỤNG TRANSACTION
Các câu lệnh SQL thực hiện tuần tự trong một Transaction là hoàn toàn độc lập so với ngôn ngữ lập trình. Vì vậy một khối lệnh SQL có thể được xây dựng tuần tự bởi ngôn ngữ lập trình mà bạn đang sử dụng để có thể tạo ra được ứng dụng mong muốn.
- Cần sử dụng storage engine InnoDB cho table dữ liệu.
- Đảm bảo một client tạo ra một phiên kết nối với MySQL để cô lập được các transaction ở các client khác nhau. (Ví dụ như không sử dụng hàm pconnect trong mysql khi sử dụng Transaction)
- Bắt buộc phải sử dụng START TRANSACTION;BEGIN; để bắt đầu một Transaction
- Có thể thực hiện nhiều câu lệnh SELECT, INSERT, UPDATE, DELETE sau lệnh BEGIN;
- Đảm bảo kiểm tra nếu toàn bộ các câu lệnh thực hiện thành công, chính xác thì thực hiện COMMIT, ngược lại có một lệnh thất bại thì thực hiện lệnh ROLLBACK
Sử dụng với PHP
try {
// First of all, let's begin a transaction
$db->beginTransaction();
// A set of queries; if one fails, an exception should be thrown
$db->query('first query');
$db->query('second query');
$db->query('third query');
// If we arrive here, it means that no exception was thrown
// i.e. no query has failed, and we can commit the transaction
$db->commit();
} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$db->rollback();
}