ดังที่เราทราบในการทำธุรกรรม คำสั่งจะถูกดำเนินการเป็นหน่วย หากการดำเนินการใด ๆ ภายในธุรกรรมล้มเหลว ธุรกรรมทั้งหมดจะล้มเหลวและควรย้อนกลับ มิฉะนั้น การเปลี่ยนแปลงใด ๆ ที่ทำโดยคำสั่งจะถูกบันทึกลงในฐานข้อมูล สำหรับการดำเนินการธุรกรรม MySQL ให้คำสั่งต่อไปนี้ -
เริ่มการทำธุรกรรม
ตามชื่อที่แนะนำ ธุรกรรมเริ่มต้นด้วยคำสั่งนี้ โดยทั่วไป จะแจ้ง MySQL ว่าคำสั่งที่ตามมาควรถือเป็นหน่วยงานเดียวจนกว่าธุรกรรมจะสิ้นสุดลง
ตกลง
คำสั่ง COMMIT ทำการเปลี่ยนแปลงฐานข้อมูล กล่าวอีกนัยหนึ่ง เมื่อธุรกรรมเสร็จสมบูรณ์ ควรใช้คำสั่ง COMMIT เพื่อให้การเปลี่ยนแปลงในตารางที่เกี่ยวข้องทั้งหมดมีผล
ย้อนกลับ
คำสั่ง ROLLBACK จะเลิกทำการเปลี่ยนแปลงใดๆ ที่ทำโดยคำสั่ง และส่งกลับฐานข้อมูลไปยังสถานะก่อนหน้า เช่น ในสถานะที่เกิดขึ้นเมื่อธุรกรรมเริ่มต้น
ตัวอย่าง
ต่อไปนี้คือตัวอย่างการแสดงการใช้งานธุรกรรม MySQL –
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)
ในตัวอย่างนี้ ธุรกรรมเริ่มต้นโดยคำสั่ง START TRANSACTION จากนั้นดำเนินการคำสั่ง INSERT สองคำสั่งตามด้วยคำสั่ง COMMIT คำสั่ง COMMIT จะบันทึกการเปลี่ยนแปลงในฐานข้อมูลซึ่งสามารถสังเกตได้จากชุดผลลัพธ์ต่อไปนี้ ซึ่งแสดงว่าค่าต่างๆ ถูกแทรกลงในตารางแล้ว -
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec) 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)
ในตัวอย่างนี้ ธุรกรรมเริ่มต้นโดยคำสั่ง START TRANSACTION จากนั้นดำเนินการคำสั่ง INSERT สองคำสั่งตามด้วยคำสั่ง ROLLBACK คำสั่ง ROLLBACK จะยกเลิกการเปลี่ยนแปลงที่ทำกับฐานข้อมูลซึ่งสามารถสังเกตได้จากชุดผลลัพธ์ต่อไปนี้ซึ่งแสดงว่าไม่มีการแทรกค่าใหม่ลงในตาราง -
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)