mysql事务学习
2022-09-16 本文已影响0人
Rena的秘密
并发事务带来的问题:
1.脏写:就是最后的更新覆盖了由其他事务所做的更新。
2.脏读:就是读取到了其他事务已修改未提交的数据。
3.不可重复读:指同一个事务中在不同时刻相同查询语句读取到的数据结果不一致(在本事务中并没有发生更新操作)。
4.幻读:是指在当前事务中读取到了其他事务中新增的数据。
事务的属性(ACID)
1.原子性:一个事务中所有的操作要么一起完成,要么一起失败。
2.一致性:事务的开始和结束时,数据要保证一致的状态,不能一个操作的数据被修改成功,一个操作的数据修改失败。
3.隔离性:指的是当前事务中进行数据查询时,其他事务对当前数据修改了,本事务中多次查询到的数据结果是一样的。
4.持久性:指的是事务完成后,它对于数据的修改是永久性的,即使出现故障也是支持的。
事务的隔离级别
read-uncommitted(读未提交):在当前隔离级别下,在一个事务中能读取到其他事务未提交的数据,会产生脏读、不可重复读、幻读的问题。
read-committed(读已提交):在当前隔离级别下,在一个事务中能读取到其他事务已提交的数据,会产生不可重复读、幻读的问题。
repeatable-read(可重复读):在当前隔离级别下,通过MVCC机制,会解决不可重复读的问题,保证未执行更新操作前,同一条sql语句读取到的数据结果一样;但是当其他事务提交了一个插入数据的操作,本事务未更新时虽然会感知不到,但是如果做了更新操作,再去执行查询,可能会产生幻读的问题。(mysql默认的隔离级别)
serializable(可串行化):在当前隔离级别下,是通过加锁的方式锁定当前事务中查询操作的表里的所有数据,当其他事务进行更新或者插入的时候,会进行锁等待,无法执行成功。