mysql事务基本要素和隔离级别

注意:只是个人理解的手记,不具备权威准确性

mysql事务基本要素和隔离级别

一.事务的四个基本要素

1.原子性:事务中的操作要么都执行,要么都回滚

2.一致性:A和B存款各位500,相互转账总额保持1000不变,对开发者有要求,不能写出错误逻辑

3.隔离性:多事务并发时,保证各事务处理互不干扰,有四个隔离级别,在并发和干扰之间权衡(需要深入学习锁知识)

4.持久性:事务一旦提交,数据一定持久化到数据库,不可回滚,除非执行相反操作事务,mysql通过日志实现的.

二.事务的隔离级别

1.读取未提交

A事务会读取到B事务未提交的更新内容

缺点:如果B回滚了,A会读取到B的中间状态,可造成脏读

2.读取已提交

A事务可以读取到B事务提交的更新内容,

优点:因为只可以读B提交的内容,所以解决了1中的脏读问题

缺点:A事务前后查询的结果可能不一致,可造成不可重复读

3.可重复读

A事务读取的记录总是第一次查询的快照,无论B事务提交更新,都不会影响A的查询结果

优点:因为A读取的都是第一次查询的快照,所以解决了2中不可重复读的问题,也不会出现1脏读

缺点:B事务插入的新记录A中是查询不到的,但是A事务进行的增删改会读取最新记录,可造成幻读

扩展:可重复读下间隙锁(Gap Lock)可以锁定一个范围,防止数据插入避免部分幻读(需要继续深入学习锁知识)

4.串行化

A查询数据,B可以查询数据,但是B不可以再增删改数据

优点:避免了3中的幻读,当然1的脏读和2的不可重复读也不会出现

缺点:增删改无并发

三.不同隔离性引发的问题

脏读:读到了别人未提交的内容

不可重复读:读到了别人update的内容

幻读:未读到别人insert或delete的内容,但是增删改时却存在

四.操作

1.查看全局和当前会话隔离级别

select @@global.tx_isolation, @@tx_isolation;

2.设置全局或当前会话隔离级别

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL

{

REPEATABLE READ

| READ COMMITTED

| READ UNCOMMITTED

| SERIALIZABLE

}

发布了42 篇原创文章 · 获赞 25 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq812858143/article/details/103285503