事务基本介绍(一)

1 篇文章 0 订阅
1 篇文章 0 订阅

        事务是咱们程序猿操作数据库经常被提起的,有关事务的知识点也是蛮多的哈~ 今天咱们就聊聊有关事务的知识。


什么是事务:

        通俗的讲,事务就是操作数据库的最小单元,就像进程是操作系统分配资源的基本单位。是类似的哈。

        既然是最小单位,那么它的特性之一肯定会有原子性,所谓原子性就是不可分割的最小单位,所以我们执行的每一条sql都是以事务的方式去提交,或者回滚。说到这里,事务的四大特性中的原子性已经介绍完啦,下面我们来详细的说说四大特性。


四大特性:

1、 原子性:事务是不可分割的最小单位,就是最基本的单位啦,不能再小啦,臣妾做不到~

2、 一致性:是指事务执行前后,都要处于一致的状态。例如:小明的父亲给小明转100块钱,这时,小明的手上多了一百块钱,所对应的小明他爸手上减少了一百块钱。这种状态是正确的,这就保持了一致性。如果不保持一致,小明他爸给小明转钱,小明手上多了100,我手上,啊不,小明他爸手上的钱还没少,那就多给我来几个这样的爸爸。

4、 隔离性:上面说了事务的原子性,了解了事务是最小的单位,我们可以把事务比作一个单独的个体,个体与个体之间是相互独立的,一个个体做某件事情的时候,不会受到别的个体的影响,这就是事务的隔离性。

        四大特性已经介绍完了,这时候有个疑问,如果在同一时间内有很多个事务去操作数据库,会不会造成什么问题呢?说问题之前,我们需要知道一点,就是事务在操作的时候会不会允许其他事务去操作数据库。打个比方(虽然不知道为什么要打他),事务A正在改一条数据,过了一会,事务B来了,B非常没礼貌的和A抢夺这条数据的操作权,当A和B都执行完之后,最后的结果应该保存A修改过后的还是B修改过后的呢?这样肯定是不合理的,也不满足事务的四大特性,但是如果B事务只是来读取数据,而不是来争抢操作权,这时A和B就不会有冲突,自然就合理啦~,如果是这种情况,就会造成以下说的几种问题。

事务产生的问题:

1、脏读:举个栗子,某个事务修改了某条数据还没提交,这时另一个事务来读取数据,现在读取到的数据是已经修改过的数据,到现在还没有什么大问题哈,现在修改数据的事务要搞事情了!修改数据的事务回滚了,这时读取数据的事务查询到的数据就无效了,这就是脏读的概念

2、不可重复读:不可重复读是指一个事务执行了两次查询操作,现在修改数据的事务还没介入,第一次查询是正常的,好啦!现在修改数据的事务要介入了,修改数据的事务修改了一条数据,现在执行第二条查询语句,这时候查询出来的数据是以经修改过的数据,但是这个时候修改数据的事务又回滚了,这就造成了查询出来的数据是无效的问题。

3、幻读:幻读的概念和不可重复读是类似的,区别是不可重复读的重点是修改数据,就是update,而幻读是增加和删除,也就是数据的数量上出现了问题,这时幻读的概念。

        我们也可以规避这些问题,比如Oracle默认的隔离级别可以防止脏读,mysql默认的隔离级别可以预防脏读和不可重复读,下一篇再说一下事务的隔离级别和传播行为....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值