老杜MySQL/days.05(事务)

1. 事务(一个完整的业务逻辑,最小的工作单元)

  a. 事务中的语句要么全部成功,要么全部失败;

  b. 只有DML语句才有事务的说法,即 insert、delete、update;

  c. 事务怎么做到多条DML语句同时成功、失败的:

    InnoDB存储引擎:提供一组用来记录事务性活动的日志文件,事务执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”中;

  d. 提交事务:清空事务性活动的日志文件,将数据全都彻底持久化到数据库表中;标志事务的成功结束;

  e. 回滚事务:撤销之前DML的操作,并清空事务性活动的日志文件,标志事务的失败;(只能回滚到上一次的提交点)

  d. 默认开始自动提交事务(每条DML语句执行都会提交一次),可以使用 start  transaction;语句将自动提交事务的语句关闭;

2. 事务的4个特性:

  原子性:事务时最小的工作单元,不可再分;

  一致性:在一个事务中,要么同时成功,要么同时失败,保证事务的一致性;

  隔离性:事务A和事务B之间分隔开,否则并发操作时会破坏数据安全;

  持久性:事务提交,相当于把没有保存到硬盘的数据存储到硬盘上;

3. 事务的隔离性

  读未提交:read  uncommitted(最低隔离级别)

    事务A可以读到事务B未提交的数据,会读到脏数据,一般不用;

    

  读已提交:read  committed(oracle默认的级别)

    事务A只可以读到事务B已提交的数据,解决脏读现象;但是存在不可重复读取数据的问题;

    

  可重复读:repeatable  read(读取的都是刚开启事务时的数据,事务不结束,读到的永远都是开始的数据)(sql默认级别)

    事务A开启后,不管过多久,每一次在事务A中读取到的数据都是一致的。即使事务B修改并提交了,事务A读到的数据还是一致的;

    可能会出现幻影,每次读到的数据不够真实;

    

  序列化 / 串行化:serializable(最高隔离级别)

    效率最低,解决所有问题,事务排队不能并发;

    

 

 

    

  

posted @ 2022-09-25 18:24  LinxhzzZ  阅读(22)  评论(0)    收藏  举报