用最土的话聊一聊事务(一篇文章让你记住事务)


前言

Hi,大家好,我是说话最土的IDEA操作工,今天给大家介绍关于事务的一些事儿,同时也作为自己的笔记。希望大家阅读后可以不惜言语指出错误或提出建议!


一、嘛叫事务?事务是个嘛玩意儿?

事务:一条或多条SQL语句组成一个执行单元,要么都成功,要么都失败。诶,换句话说就是,比如我插入一批数据,其中有一条没插进去,那其他的都插不进去。

二、事务的四大特征

1.原子性

原子性就是对数据的这顿操作,要么全部成功,要么全部失败回滚。

2.一致性

执行前和执行后都必须处于一个一致性状态。嘛意思?举个栗子,转账这事儿,A和B,俩人一共2000大洋,执行之前是2000,A给B转账500,那转完之后俩人一共还得是2000,少一分就急!

3.隔离性

多个并发事务之间要相互隔离。介事儿后面会提到,记着有这码事。

4.持久性

持久性,一旦提交,就是永久性的,即便突然断电了(就和我刚才一样!)数据还得有!!

三、事务的隔离级别

这个就是上面说的第三个特征,隔离性。请看下面这张表。

隔离级别名称会引发的问题
read uncommitted读未提交脏读、不可重复读、幻读
read committed读已提交不可重复度、幻读
repeatable read可重复读幻读
serializable串行化

这个表是有规律的,背一下也是可以滴,当然如果理解了这些“会引发的问题”,那记起来简直轻轻松松,再也不怕面试官!

四、问题助解

1.脏读

先说说嘛叫脏读,脏读,就是读取了别人修改后,但没commit的数据!可怕不,再用转钱这事举个栗子。
说小张儿跟小李一人有1000大洋,小张儿跟小李借500,小李就借了,小李说那你给我写个借条吧,小张儿面带笑容忙着答应,并写了欠条。这时,小张儿有1500大洋,小李有500大洋,事后,小张儿把欠条撕了不认账了,完蛋,小李死无对证,还少了500块。
这个事对应到咱们事务中就是,A修改数据还没提交(1500,500),此时B读取数据(1500,500),然后A将数据回滚了,真实的数据是(1000,1000),而B却认为是(1500,500)。
以上就是读未提交带来的事故!
在这里插入图片描述

2.不可重复读

这是在事务处于“读已提交”的状态下。读取了其他人提交之后的数据。
诶,那我们说这挺正常啊,人家没提交,你说有脏读,不对。这回提交了怎么还不对呢?
有个公司的销售,周一老板说开会,小张赶紧查查数据表里这个季度部门的营业额,1000万!美滋滋的等着老板表扬了,小李和小张一个部门,听说要开会,想起有次自己的一个大额商品遭到大量退货,损失得有几十万,赶紧改改数据库,这个时候小张已经坐在办公室跟领导吹上了。会上,老板打开数据表一看,小张他们部门的营业额是900万,小张一下傻眼了。。
这就是B读取了数据,在其他人再次改了数据之后,没读到引发的事故。

3.幻读

幻读在事务处于可重复读的状态下发生。
这个很好理解,A插入一条数据“1,张三”,但是还没提交。B也想插入这条数据,他先查了数据表里没有这条数据,于是进行插入,可是一直不成功。这时A提交了数据,B那边提示插入失败,因为数据表里有这条数据里。B处于糊里糊涂的状态。
在这里插入图片描述


总结

好了,以上就是今天要分享的内容,希望通过这几个小故事可以让大家理解事务,也希望在评论区看到大家的建议和指导。我们下次再见咯~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IDEA上的操作工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值