在MySQL中,事务是针对数据库的一组操作。一个事务可以由多条SQL语句组成。事务的执行过程中,其内部所有的SQL语句要么同时执行成功,要么同时执行失败。
例如,A账户要给B账户转账1000元,此时SQL语句的操作步骤为:
A账户余额减少1000元 ——> B账户余额增加1000元。
此时如果A账户的SQL语句执行成功,但B账户的SQL语句因为某些原因执行失败了,那么此时就会出现金额不正确的问题。为了应对这种情况,我们就必须将两步操作看成为一个整体,即用一个事务将其包裹。这样就只有当两条语SQL句同时执行成功后,才会修改数据库中的内容,而如果任意一条SQL语句执行失败,则返回到事务开始前的状态(不对数据库内的数据进行修改)。
下面介绍一下MySQL中如何开启一个事物。
START TRANSACTION; // 开启一个事务
执行上述语句后,每一条SQL语句将不会自动提交,直到用户手动提交或回滚。(注:如果新建一个事务时前一个事务没有提交,那么此时前一个事务会隐式地执行提交操作。)
COMMIT; // 提交事务
当确认所有SQL语句执行无误后,可以执行COMMIT语句提交事务。
ROLLBACK; // 回滚事务
如果事务中的某一条SQL语句出现了问题,则可以使用ROLLBACK语句对开启的事务回滚,此时事务内对数据地所有操作将不会生效(即回滚)。
注:InnoDB引擎支持事务,另一个常见的存储引擎MyISAM则不支持事务。对于MyISAM存储引擎来说,无论事务是否提交,对数据的操作都会立即生效。