我們知道,在事務中,語句是作為一個單元執行的。如果事務內的任何操作失敗,則整個事務將失敗并應回滾;否則,語句所做的任何更改都會保存到數據庫中。為了實現事務,MySQL 提供了以下語句 –
START TRANSACTION
顧名思義,事務從此語句開始。基本上,它通知 MySQL 接下來的語句應被視為單個工作單元,直到事務結束。
COMMIT
COMMIT 語句提交對數據庫的更改。換句話說,當一個事務成功完成后,應該發出 COMMIT 命令,以使所有涉及的表的更改生效。
ROLLBACK
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)
登錄后復制
以上就是我們如何實現MySQL事務?的詳細內容,更多請關注www.92cms.cn其它相關文章!