

TCL Trong MySQL – Quản Lý Giao Dịch Với COMMIT, ROLLBACK, SAVEPOINT
- 08-07-2025
- Toanngo92
- 0 Comments
TCL – Transaction Control Language trong MySQL — nhóm lệnh được sử dụng để kiểm soát và quản lý các giao dịch (transactions), đảm bảo tính toàn vẹn và an toàn của dữ liệu trong những hệ thống quan trọng.
Mục lục
✅ 1. TCL là gì?
TCL (Transaction Control Language) là tập hợp các lệnh để kiểm soát giao dịch (transaction) trong cơ sở dữ liệu.
✅ 2. Các lệnh chính trong TCL
Lệnh | Mục đích |
---|---|
START TRANSACTION / BEGIN | Bắt đầu một giao dịch mới |
COMMIT | Xác nhận và lưu vĩnh viễn các thay đổi trong giao dịch |
ROLLBACK | Hủy bỏ toàn bộ thay đổi kể từ lúc bắt đầu giao dịch |
SAVEPOINT | Đánh dấu 1 điểm tạm trong giao dịch |
ROLLBACK TO SAVEPOINT | Quay về điểm tạm đó mà không hủy hết giao dịch |
RELEASE SAVEPOINT | Xóa điểm tạm đã tạo (giải phóng bộ nhớ) |
SET autocommit | Bật/tắt chế độ tự động lưu dữ liệu sau mỗi câu SQL |
✅ 3. Cú pháp tổng quan
START TRANSACTION; -- hoặc BEGIN;
-- các câu lệnh SQL...
COMMIT;
-- hoặc
ROLLBACK;
✅ 4. SAVEPOINT – rollback một phần
Cho phép bạn đánh dấu một điểm giữa giao dịch để có thể rollback từng phần, không phải tất cả.
🧪 Ví dụ minh họa:
START TRANSACTION;
INSERT INTO Orders VALUES (1, 'Nam', 500);
SAVEPOINT after_insert;
UPDATE Orders SET amount = 1000 WHERE id = 1;
-- lỗi phát hiện, muốn quay lại sau insert
ROLLBACK TO after_insert;
COMMIT;
✅ Giao dịch chỉ giữ lại phần
INSERT
, phầnUPDATE
đã bị rollback.
✅ 5. RELEASE SAVEPOINT
Khi bạn không cần một điểm tạm nào nữa, bạn có thể giải phóng:
RELEASE SAVEPOINT after_insert;
Giải phóng bộ nhớ, đặc biệt hữu ích khi dùng nhiều
SAVEPOINT
.
✅ 6. autocommit
trong MySQL
MySQL mặc định bật autocommit
, tức là mỗi câu SQL tự COMMIT
ngay khi thực thi.
Xem trạng thái:
SELECT @@autocommit;
Tắt chế độ autocommit
:
SET autocommit = 0;
START TRANSACTION;
-- ...
COMMIT; -- hoặc ROLLBACK
Nếu
autocommit = 0
, bạn cần dùngCOMMIT
thủ công.
✅ 7. Lưu ý khi dùng TCL
Lưu ý | Giải thích |
---|---|
✅ Chỉ hoạt động với bảng InnoDB | Không áp dụng được với bảng MyISAM , MEMORY |
❌ Không thể rollback các lệnh DDL | Ví dụ: DROP , ALTER , CREATE không thể hủy được |
✅ Rất quan trọng trong hệ thống tài chính | Đảm bảo dữ liệu không bị mất mát khi gặp lỗi |
✅ Nên dùng SAVEPOINT trong giao dịch dài | Giúp rollback từng phần thay vì toàn bộ |
📘 Kết Luận
- TCL là phần trung tâm trong xử lý an toàn dữ liệu ở mức giao dịch.
- Hãy dùng
SAVEPOINT
khi thực hiện nhiều bước có thể sai từng phần. - Luôn
COMMIT
hoặcROLLBACK
rõ ràng khi tắtautocommit
.