我们如何实现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;
在此示例中,事务由STARTTRANSACTION语句启动。然后执行两个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;
在此示例中,事务由STARTTRANSACTION语句启动。然后执行两个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)