Trong giao dịch, các câu lệnh thực thi như một đơn vị. Nếu bất kỳ thao tác nào thất bại, toàn bộ giao dịch thất bại và rollback; ngược lại, thay đổi được lưu.
Các câu lệnh hỗ trợ
- START TRANSACTION: Bắt đầu giao dịch, báo MySQL các câu lệnh sau là đơn vị công việc đơn lẻ
- COMMIT: Lưu thay đổi vào cơ sở dữ liệu
- ROLLBACK: Hoàn tác thay đổi, quay về trạng thái trước giao dịch
Ví dụ COMMIT
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Aarav','Maths',50); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Marks Values(2, 'Harshit','Maths',55); Query OK, 1 row affected (0.00 sec) mysql> COMMIT; Query OK, 0 rows affected (0.06 sec) mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+
Dữ liệu được lưu sau COMMIT.
Ví dụ ROLLBACK
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Aarav','History',40); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Harshit','History',48); Query OK, 1 row affected (0.00 sec) mysql> ROLLBACK; Query OK, 0 rows affected (0.04 sec) mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | +------+---------+---------+-------+
Dữ liệu mới bị xóa sau ROLLBACK, bảng quay về trạng thái ban đầu.