我們知道,在事務中,語句是作為一個單元執(zhí)行的。如果事務內(nèi)的任何操作失敗,則整個事務將失敗并應回滾;否則,語句所做的任何更改都會保存到數(shù)據(jù)庫中。為了實現(xiàn)事務,MySQL 提供了以下語句 –
START TRANSACTION
顧名思義,事務從此語句開始。基本上,它通知 MySQL 接下來的語句應被視為單個工作單元,直到事務結(jié)束。
COMMIT
COMMIT 語句提交對數(shù)據(jù)庫的更改。換句話說,當一個事務成功完成后,應該發(fā)出 COMMIT 命令,以使所有涉及的表的更改生效。
ROLLBACK
ROLLBACK 命令撤消語句所做的任何更改,并將數(shù)據(jù)庫返回到之前的狀態(tài),即事務開始時的狀態(tài)。
示例
以下是展示 MySQL 事務實現(xiàn)的示例 –
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 語句啟動。然后執(zhí)行兩個 INSERT 語句,后跟一個 COMMIT 語句。 COMMIT 語句會將更改保存到數(shù)據(jù)庫,可以從以下結(jié)果集中觀察到這些更改,該結(jié)果集顯示值已插入到表中 –
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 語句啟動。然后執(zhí)行兩個 INSERT 語句,后跟一個 ROLLBACK 語句。 ROLLBACK 語句將撤消對數(shù)據(jù)庫所做的更改,可以從以下結(jié)果集中觀察到,該結(jié)果集顯示沒有新值插入到表中 –
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
登錄后復制
以上就是我們?nèi)绾螌崿F(xiàn)MySQL事務?的詳細內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!