我们如何实现MySQL事务?

众所周知,在事务中,语句是作为一个单元执行的。如果事务中的任何操作失败,则整个事务将失败并且应回滚;否则,语句所做的任何更改都会保存到数据库中。为了实现事务,MySQL提供了以下语句-

开始事务

顾名思义,事务从此语句开始。基本上,它通知MySQL在事务结束之前,应将后面的语句视为单个工作单元。

承诺

COMMIT语句将更改提交到数据库。换句话说,当成功的事务完成时,应发出COMMIT命令,以便对所有涉及的表所做的更改都将生效。

回滚

ROLLBACK命令撤消该语句所做的任何更改,并使数据库返回到先前的状态,即处于事务开始时的状态。

示例

以下是展示MySQL事务实现的示例-

mysql> START TRANSACTION;

mysql> INSERT INTO Marks Values(1, 'Aarav','Maths',50);

mysql> INSERT INTO Marks Values(2, 'Harshit','Maths',55);

mysql> COMMIT;

在此示例中,事务由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;

mysql> INSERT INTO Marks Values(1, 'Aarav','History',40);

mysql> INSERT INTO Marks Values(1, 'Harshit','History',48);

mysql> ROLLBACK;

在此示例中,事务由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)