Giao dịch (Transaction) là một tập hợp các câu lệnh SQL được thực hiện như một đơn vị công việc duy nhất. Nếu tất cả các câu lệnh trong giao dịch thành công, kết quả sẽ được cam kết (commit) vào cơ sở dữ liệu. Nếu bất kỳ câu lệnh nào thất bại, tất cả các thay đổi sẽ được hủy bỏ (rollback) để duy trì tính toàn vẹn của dữ liệu. Giao dịch đảm bảo tính nhất quán và an toàn dữ liệu trong môi trường cơ sở dữ liệu.
Một giao dịch phải tuân thủ bốn đặc tính được gọi là ACID:
START TRANSACTION
).START TRANSACTION;
-- Chèn dữ liệu vào bảng 1
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
-- Chèn dữ liệu vào bảng 2
INSERT INTO transactions (user_id, amount, type) VALUES (1, 1000, 'deposit');
-- Nếu cả hai câu lệnh đều thành công, commit giao dịch
COMMIT;
Nếu có lỗi xảy ra trong bất kỳ bước nào, bạn có thể sử dụng ROLLBACK
để hủy bỏ toàn bộ giao dịch:
START TRANSACTION;
-- Chèn dữ liệu vào bảng 1
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
-- Giả sử câu lệnh sau gặp lỗi
INSERT INTO transactions (user_id, amount, type) VALUES (1, 1000, 'withdraw');
-- Do lỗi xảy ra, rollback giao dịch
ROLLBACK;
START TRANSACTION;
-- Tạo savepoint
SAVEPOINT save1;
-- Chèn dữ liệu vào bảng 1
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
-- Quay lại điểm lưu
ROLLBACK TO save1;
-- Commit những thay đổi sau savepoint
COMMIT;
MyISAM
, thì chúng không hỗ trợ các tính năng giao dịch.Giao dịch trong MySQL là một công cụ mạnh mẽ để quản lý các hoạt động thao tác dữ liệu một cách an toàn, đảm bảo rằng dữ liệu luôn trong trạng thái nhất quán. Việc sử dụng giao dịch giúp tránh các vấn đề về mất dữ liệu hoặc lỗi trong quá trình xử lý đồng thời.