一、什么是事务?
事务 就是一组原子性的SQL操作,也就是说,事务内的SQL语句,要么全部执行成功,要么全部执行失败。
银行转账是解释事务的一个经典例子,假设一个🧑用户A(id=123)需要给👩用户B(id=456)转账1000
元,假设目前用户A、用户B余额都是2000
元(账户表:account),那么需要至少三个步骤:
- 检查用户A的账户余额是否高于
1000
元; - 从用户A的账户余额中扣减去
1000
元; - 给用户B的账户月增加
1000
元。
上述的三个操作必须实是在一个同一个事务中完成,任何一个步骤失败,则必须回滚所有的步骤,可以使用START TRANSACTION
语句开启一个事务,然后要么使用COMMIT
提交事务将修改的数据持久保留,要么使用ROLLBACK
撤销所有的修改,事务的SQL语义样本如下:
1 START TRANSACTION;
2 SELECT balance FROM account WHERE customer_id = '123';
3 UPDATE account SET balance = balance - 1000.00 WHERE customer_id = '123';
4 UPDATE account SET balance = balance + 1000.00 WHERE customer_id = '456';
5 COMMIT;
🤔Tip:试想一下,如果执行到第四条语句的时候服务器崩了,会发生什么?🧑用户A明明转账了
1000
元给👩用户B,但是用户B没有收到,最后结果是用户A无端端没了1000
块钱,如果用户A是你,我估计你要疯了~
很明显这就是一个事务问题,事务必须严格的遵守ACID
特性&