Transactions
🔥 Tổng Quan Về Transaction Trong MySQL
✅ 1. Transaction là gì?
Transaction là một nhóm các thao tác SQL được thực hiện như một đơn vị logic duy nhất – hoặc thành công tất cả, hoặc thất bại tất cả.
Ví dụ:
🧱 2. ACID – 4 Thuộc Tính Cốt Lõi
Tính chất của giao dịch (ACID):**
Atomicity: Tính nguyên tử - giao dịch phải được thực hiện toàn bộ hoặc không có phần nào được thực hiện.
Consistency: Tính nhất quán - giao dịch phải chuyển hệ thống từ trạng thái nhất quán này sang trạng thái nhất quán khác.
Isolation: Tính cô lập - giao dịch này không ảnh hưởng đến giao dịch khác.
Durability: Tính bền vững - khi giao dịch đã được xác nhận, thay đổi sẽ được lưu trữ vĩnh viễn.
💡 3. Các Lệnh Quản Lý Transaction
START TRANSACTION
hoặc BEGIN
Bắt đầu một transaction mới
COMMIT
Xác nhận và lưu thay đổi
ROLLBACK
Huỷ toàn bộ các thao tác trong transaction
SAVEPOINT name
Tạo điểm lưu giữa transaction
ROLLBACK TO SAVEPOINT name
Rollback về điểm lưu
🛠️ 4. Storage Engine hỗ trợ Transaction
InnoDB
✅ Có hỗ trợ
MyISAM
❌ Không hỗ trợ
👉 Hãy luôn dùng InnoDB nếu hệ thống của bạn cần xử lý transaction.
🔐 5. Isolation Levels (Cấp độ cô lập)
Ảnh hưởng trực tiếp đến performance & data consistency.
READ UNCOMMITTED
✅
✅
✅
READ COMMITTED
❌
✅
✅
REPEATABLE READ (mặc định của InnoDB)
❌
❌
✅
SERIALIZABLE
❌
❌
❌
Ví dụ cấu hình:
💥 6. Vấn Đề Kinh Điển (Classic Problems)
Dirty Read
Đọc dữ liệu chưa commit
Non-repeatable Read
Cùng 1 query, đọc ra 2 kết quả khác nhau trong 1 transaction
Phantom Read
Thêm dữ liệu mới làm thay đổi kết quả truy vấn
⚙️ 7. Tích hợp với Java – JDBC/Spring
Trong Java, bạn sẽ thường dùng:
JDBC:
Spring:
📌 8. Một số best practices cho Transaction:
Giữ transaction ngắn gọn, tránh lock lâu → gây deadlock
Luôn xử lý rollback exception cẩn thận
Không mix quá nhiều thao tác không liên quan vào cùng một transaction
Luôn xác định isolation level phù hợp với business
Last updated