当前位置:网站首页>MySQL——事务

MySQL——事务

2022-06-11 19:32:00 Java学不会

1、什么是事务

  • 要么都成功,要么都失败
    1. SQL执行 A给B 转账 A 1000 -->200 B 200
    2. SQL执行 B收到A的钱 A 800 --> B 400
  • 将一组SQL放在一个批次中执行
  • 事务原则 :ACID原则 原子性,一致性,隔离性,持久性(脏读,幻读)
    1. 原子性(Atomicity):要么都成功,要么都失败
    2. 一致性(Consistency):事务前后的数据完整保证一致
    3. 持久性(Durability):事务一旦提交则不可逆,被持久化到数据库中
    4. 隔离性(Isolation):一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
      1. 脏读:指一个事务读取了另一个事务未提交的数据。
      2. 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)
      3. 幻读(虚读):指在一个事务内读取到了别的事务插入饿数据,导致前后读取不一致。

2、测试事务实现转账

  • 转账事务
    -- 手动处理事务
    SET autocommit =0
    -- 事务开启
    START TRANSACTION -- 标记一个事务的开始,从这个之后的SQL都在一个事务内
    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	-- 恢复默认值
    
  • 事务使用的总结
    -- 手动处理事务
    SET autocommit =0
    -- 事务开启
    START TRANSACTION -- 标记一个事务的开始,从这个之后的SQL都在一个事务内
    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	-- 恢复默认值
    
    
    SAVEPOINT 保存点名	-- 设置一个事务的保存点
    
    ROLLBACK TO SAVEPOINT 保存点名	-- 回滚到保存点
    
    RELEASE SAVEPOINT 保存点名 -- 释放保存点
    
原网站

版权声明
本文为[Java学不会]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45042462/article/details/125233191