mysql-事务
事务
什么是事务
事务就是一系列sql语句的组合,是一个整合
事务的特点
- 原子性: 指的是这个事务中的sql语句是一个整体,不能拆分,要么都执行,要么全部失败
- 一致性: 事务执行结束后,表的关联关系一定是正确的,不会发送数据错乱
- 隔离性: 事务之间相互隔离,数据不会相互影响,及时操作了同一个表,本质就是加锁,根据锁的粒度不同分为几个隔离级别;
- 持久性: 事务执行成功后,数据将永久保存,无法恢复
事务的应用场景:
转账操作:
* 先把转出账号的钱扣掉,
* 再把转入账号的余额做增加操作
如果这两步操作在完成第一步操作时,突然中断了,那么,转出账号的钱被扣掉了,但是转入账号没有接收到钱,就会导致钱无缘无故丢失,因此,我们就需要把这两步操作绑定在一块,如果其中一步没有成功,那整个都执行失败,确保账号数据正确.
# 开启事务
start transaction
添加sql 语句......
savepoint a # 保存点, 可以在rollback 指定回滚到某一个savepoint,也就回滚一部分
rollback # 回滚操作,即撤销没有提交之前的所有操作,如果已经提交,就恢复不了
commit # 提交事务,一旦提交就持久化了
# 何时回滚 当一个事务执行过程中出现了异常时 我们可以捕获异常
# 何时提交 当事务中所有语句都执行成功时
create table account(name char(10),money float);
insert into account values("张三丰",5000),("张无忌",100);
# 开启事务
start transaction;
sql语句....
update account set money = money-100 where name ="张三丰";
update account set money = money+100 where name ="张无忌";
# 提交 或者回滚 rollback,只要提交完成,就不能回滚了
commit;