事务四大特性与隔离级别

事务

alt

事务就是一组操作的集合,他是一个不可分割的整体,事务会把所有的操作作为一个整体一起向系统提交或撤销操作。

事务的操作

alt

1为自动提交,0位手动提交。

msyql默认为自动提交,需要手动设置为手动提交。

执行成功时,进行commit提交事务,程序出时是进行回滚事务。

alt

方式2,开启事务进行手动提交。

alt

事务四大特性

alt

持久性:数据库的数据最终提交之后都会存在于磁盘中,一旦进行回滚或者提交,数据都会永久的保存在磁盘中。

并发事务引发的问题

并发事务:多个事务并发运行 alt

脏读

一个事务读取到了另一个事务还未提交的数据,

alt

有两个并发事务A与B 事务首先进行进了查询id为1的数据,然后有进行了更新id为1的数据**,此时事务a的操作并未完全完成,没有进行提交**,并发事务B,在此时查询id为1的数据,查询的结果为事务a进行更改后还未提交的数据。

不可重复读

一个事务进行先后读取同一条记录,但是两次读取的数据不一致,称为不可重复读。

alt

事务A在第一步查询了id为1的数据,然后事务B修改id为1的数据并且提交了数据,然后事务A在第三步又查询了id为1的数据,发现两次查询的数据不一致。

幻读

一个事务在查询数据的时候,没有数据,但是在插入数据的时候,这行数据又存在,好像出现了幻影。

alt

事务A先查询了id为1的数据,发现并不存在,这时事务B对id为1的数据进行了插入并提交。事务a再进行插入的时候,数据插入失败,但是在查询这条数据的时候又不存在这条数据,好像出现了幻影。

事务的隔离级别

alt

对号表示问题会出现,X白表示问题已解决。

串行化·:安全性高,效率低。

读未提交:效率最高,但是安全性最低

alt

session表示 当前窗口有效,global全局有效。

读未提交

在并发事务下实现。

alt

事务A 设置隔离级别为读未提交,并且查询数据,事务B开启事务,对数据进行了修改,此时并未提交事务,但是事务a在进行查询数据的时候的时候数据发生了变化。

alt

读已提交

解决脏读问题。出现不可重读读问题,一个事务A查询两次数据不一致。

可重复读(MySQL默认)

事务A执行了两次查询的结果是一致的,尽管事务B对数据进行了修改并且提交了。但会出现幻读现象。

事务A

alt

事务B

alt

幻读现象;

查询数据不存在,但是插入数据又失败。

alt

alt

串行化

一次只允许一个事务进行操作,只有当事务A操作完成之后才能进行事务B操作,否则事务B会阻塞。

alt

alt

小结

alt

全部评论

相关推荐

2024-12-27 13:08
华南理工大学 Java
蝴蝶飞出了潜水钟丿:多看一眼就会💥
点赞 评论 收藏
分享
02-10 12:23
已编辑
新余学院 C++
采集想要offer:专业技能那里要一条一条的列出来吧,感觉你项目很厉害了,但是如果你不写技术栈面试官对你项目不太懂的话都没办法问你八股😂C++都是基架岗,都是一群9✌🏻在卷,我觉得你要是有时间学个go把MySQL和redis写上去找个开发岗吧
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务