Giao dịch (Transactions) trong MariaDB
Giao dịch (Transaction) là một nhóm các thao tác thực hiện tuần tự, hoạt động như một đơn vị duy nhất. Giao dịch chỉ kết thúc khi tất cả các thao tác trong nhóm được thực thi thành công. Nếu xảy ra lỗi ở bất kỳ thao tác nào, toàn bộ giao dịch sẽ bị hủy và không có thay đổi nào được áp dụng vào cơ sở dữ liệu.

Giao dịch tuân theo các nguyên tắc ACID, bao gồm:
- Atomicity (Nguyên tử): Đảm bảo rằng tất cả các thao tác đều thành công, hoặc nếu xảy ra lỗi, giao dịch sẽ được hủy và các thay đổi sẽ được phục hồi.
- Consistency (Nhất quán): Đảm bảo cơ sở dữ liệu luôn duy trì trạng thái hợp lệ khi giao dịch thành công.
- Isolation (Độc lập): Cho phép các giao dịch chạy độc lập mà không ảnh hưởng lẫn nhau.
- Durability (Bền vững): Đảm bảo rằng dữ liệu của giao dịch đã thành công sẽ được lưu vĩnh viễn, kể cả khi hệ thống gặp sự cố.
Cú pháp cơ bản của giao dịch trong MariaDB
Một giao dịch thường bắt đầu bằng câu lệnh START TRANSACTION và kết thúc bằng các câu lệnh COMMIT hoặc ROLLBACK:
START TRANSACTION
: Bắt đầu một giao dịch.COMMIT
: Xác nhận và lưu các thay đổi vào cơ sở dữ liệu.ROLLBACK
: Hủy bỏ giao dịch và phục hồi dữ liệu về trạng thái trước đó.
Trong trường hợp giao dịch thực thi thành công: COMMIT sẽ lưu tất cả thay đổi.
Nếu giao dịch thất bại: ROLLBACK sẽ hủy bỏ toàn bộ các thay đổi.
Lưu ý: Một số câu lệnh như CREATE, ALTER, và DROP sẽ tự động thực hiện COMMIT (gọi là implicit commit) và gây lỗi khi được sử dụng trong giao dịch.
Bài viết này được đăng tại [free tuts .net]
Các tùy chọn bổ sung trong giao dịch của MariaDB
MariaDB cung cấp thêm các tùy chọn hữu ích khi làm việc với giao dịch:
SAVEPOINT
: Tạo một điểm khôi phục trong giao dịch. Có thể quay lại điểm này khi sử dụng ROLLBACK TO SAVEPOINT.
LOCK TABLES
: Khóa các bảng để kiểm soát truy cập trong giao dịch. Dùng để ngăn việc thay đổi dữ liệu bởi các phiên khác trong khoảng thời gian nhất định.
Biến AUTOCOMMIT
:
- Nếu
AUTOCOMMIT = 1
(mặc định): Mỗi thao tác sẽ được coi là một giao dịch thành công ngay lập tức. - Nếu
AUTOCOMMIT = 0
: Các thay đổi chỉ được áp dụng khi sử dụng COMMIT rõ ràng.
Cấu trúc cơ bản của một giao dịch
Cấu trúc của giao dịch bao gồm:
- Bắt đầu giao dịch bằng lệnh
START TRANSACTION
. - Thực hiện các thao tác (INSERT, UPDATE, DELETE hoặc SELECT).
- Kiểm tra lỗi (nếu có lỗi, thực hiện
ROLLBACK
). - Lưu các thay đổi bằng cách sử dụng lệnh
COMMIT
.
Ví dụ:
START TRANSACTION; -- Bắt đầu truy vấn SELECT name FROM products WHERE manufacturer = 'XYZ Corp'; -- Cập nhật dữ liệu UPDATE spring_products SET item = name; -- Lưu lại các thay đổi COMMIT;
Cách sử dụng các tính năng nâng cao
Tạo điểm khôi phục với SAVEPOINT
START TRANSACTION; SAVEPOINT sp1; -- Tạo điểm khôi phục đầu tiên UPDATE products SET stock = stock - 10 WHERE id = 1; SAVEPOINT sp2; -- Tạo điểm khôi phục thứ hai UPDATE products SET stock = stock + 5 WHERE id = 2; -- Quay lại điểm khôi phục đầu tiên nếu có lỗi ROLLBACK TO sp1; COMMIT; -- Lưu thay đổi còn lại
Khóa bảng với LOCK TABLES
LOCK TABLES products WRITE; INSERT INTO products (name, stock) VALUES ('Product A', 50); UNLOCK TABLES; -- Mở khóa bảng
Kết bài
Giao dịch trong MariaDB là công cụ mạnh mẽ đảm bảo tính toàn vẹn và đáng tin cậy của dữ liệu trong các hệ thống lớn. Với các tính năng như SAVEPOINT, LOCK TABLES và điều khiển tự động bằng AUTOCOMMIT, người dùng có thể kiểm soát tốt hơn các thao tác trên cơ sở dữ liệu, đặc biệt trong môi trường yêu cầu mức độ chính xác cao.