1事务

1事务简介

介绍

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

操作方式一

  • 查看/设置事务提交方式
    • SELECT @@autocommit
    • SET @@autocommit=0(1为自动提交,0为手动提交,该设置只对当前会话有效)
  • 提交事务
    • COMMIT
  • 回滚事务
    • ROLLBACK

操作方式二

  • 开启事务
    • START TRANSACTION 或 BEGIN TRANSACTION;
  • 提价事务
    • COMMIT
  • 回滚事务
    • ROLLBACK

2操作实例

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

3事务四大特性ACID

  • 原子性(Atomicity):事务是不可分割的最小操作但愿,要么全部成功,要么全部失败
  • 一致性(Consistency):事务完成时,必须使所有数据都保持一致状态
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

4并发事务问题

4.1 脏读

  • 一个事务读到另一个事务还没提交的数据

  • 脏读是a未提交 但是update了 B就读到脏数据

4.2 不可重复读

  • 一个事务先后读取同一条记录,但两次读取的数据不同

  • 不可重复读 是b已经提交了 a两次select就查询到不同的数据 注意和脏读上面的区别

4.3 幻读

  • 一个事务按照条件查询数据时,没有对应的数据行,但是再插入数据时,又发现这行数据已经存在

  • b在select之后插入 这时a再insert发现无法插入

  • 但是呢再select查询时候 因为解决了不可重复读 此时还是查不到对应数据

  • 所以就是查的时候没有 但是插入的时候又有了

5事务并发隔离级别

5.1隔离级别

隔离级别 脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable Read(默认) × ×
Serializable × × ×
  • √表示在当前隔离级别下该问题会出现
  • Serializable 性能最低;Read uncommitted 性能最高,数据安全性最差

5.2操作

  • 查看事务隔离级别:
    • SELECT @@TRANSACTION_ISOLATION];
  • 设置事务隔离级别
    • SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE };
    • SESSION 是会话级别,表示只针对当前会话有效,GLOBAL 表示对所有会话有效
posted @ 2022-07-19 16:40  fao99  阅读(44)  评论(0)    收藏  举报