Transaction รัน Statement เป็นหน่วยเดียว ล้มเหลวทุกอย่าง Rollback สำเร็จ Commit MySQL มีคำสั่ง:
START TRANSACTION
เริ่ม Transaction แจ้งให้ MySQL รู้ว่าต่อไปเป็น Work Unit เดียว
COMMIT
Commit การเปลี่ยนแปลงลงฐานข้อมูล
ROLLBACK
ยกเลิกการเปลี่ยนแปลง กลับสู่สถานะก่อน Transaction
ตัวอย่าง 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 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
ตัวอย่าง 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 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
Rollback ทำให้ข้อมูลใหม่หายไป