MySQL 如何实现MySQL事务?
我们知道,在一个事务中,语句作为单元执行。如果事务中的任何操作失败,整个事务将失败并应回滚;否则,语句所做的任何更改都将保存到数据库中。为了实现一个事务,MySQL提供了以下语句:
阅读更多: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)
极客教程