写点什么

MySql 事务

作者:秋名山码民
  • 2022 年 6 月 09 日
  • 本文字数:941 字

    阅读完需:约 3 分钟

事务

事务是一组操作的集合,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。


基本操作:


-- 1. 查询张三账户余额select * from account where name = '张三';-- 2. 将张三账户余额-1000update account set money = money - 1000 where name = '张三';-- 此语句出错后张三钱减少但是李四钱没有增加模拟sql语句错误-- 3. 将李四账户余额+1000update account set money = money + 1000 where name = '李四';
-- 查看事务提交方式SELECT @@AUTOCOMMIT;-- 设置事务提交方式,1为自动提交,0为手动提交,该设置只对当前会话有效SET @@AUTOCOMMIT = 0;-- 提交事务COMMIT;-- 回滚事务ROLLBACK;
-- 设置手动提交后上面代码改为:select * from account where name = '张三';update account set money = money - 1000 where name = '张三';update account set money = money + 1000 where name = '李四';commit;
复制代码


操作方式二:


开启事务:START TRANSACTION 或 BEGIN TRANSACTION;提交事务:COMMIT;回滚事务:ROLLBACK;


操作实例:


start transaction;select * from account where name = '张三';update account set money = money - 1000 where name = '张三';update account set money = money + 1000 where name = '李四';commit;
复制代码

四大特性 ACID

  • 原子性(Atomicity):事务是不可分割的最小操作但愿,要么全部成功,要么全部失败

  • 一致性(Consistency):事务完成时,必须使所有数据都保持一致状态

  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行

  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

并发事务


这三个问题的详细演示:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=55cd


并发事务隔离级别:



  • √表示在当前隔离级别下该问题会出现

  • Serializable 性能最低;Read uncommitted 性能最高,数据安全性最差


查看事务隔离级别:SELECT @@TRANSACTION_ISOLATION;设置事务隔离级别:SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE };SESSION 是会话级别,表示只针对当前会话有效,GLOBAL 表示对所有会话有效

用户头像

卷不死,就往…… 2021.10.19 加入

2019NOIP退役成员,华为云享专家,阿里云专家博主,csdn博主,努力进行算法分享,有问题欢迎私聊

评论

发布
暂无评论
MySql事务_6月月更_秋名山码民_InfoQ写作社区