MySQL事务

  • 将一组SQL放到一个批次中去执行,要么都成功,要么都失败

  • 事务原则:ACID原则

    • 原子性(Atomicity):要么都成功,要么都失败
    • 一致性(Consistency):事务前后的数据完整性要保证一致
    • 隔离性(Isolation):多个用户并发访问数据库时,数据库为每个用户开启事务,互不干扰
    • 持久性(Durability):事务一旦提交则不可逆,被持久化到数据库中;若未提交,则返回提交前状态
  • 隔离所导致的一些问题

    • 脏读:一个事务读取到另一个事务未提交的数据
    • 不可重复读:在一个事务内,多次读取的结果不同
    • 虚读(幻读):在一个事务内读取到别的事务插入的数据,导致前后读取不一致
  • MySQL是默认开启事务自动提交的

  • 手动处理事务流程(1-5)

    1. 关闭自动提交:set autocommit = 0;
    2. 开启事务:start transaction(标记一个事务的开始,从这个之后的SQL都在同一个事务内)
    3. 提交(持久化):commit(成功)
    4. 回滚(回到事务原来的样子):rollback(失败)
    5. 结束事务(开启自动提交):set autocommit = 1;
    6. 设置一个事务的保存点:savepoint 保存名点
    7. 回滚到保存点:rollback to savepoint 保存点名
    8. 撤销保存点:release savepoint 保存点名

例:模拟转账

set autocommit = 0; -- 关闭自动提交
start transaction; -- 开始一个事务
update account set money = money-500 where `name` = 'A'; -- A减500
update account set money = money+500 where `name` = 'B'; -- B加500
commit; -- 提交事务,提交了就被持久化了!
rollback; -- 回滚
set autocommit = 1; -- 恢复默认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Remote_Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值