当前位置:   article > 正文

[MySQL]事务

[MySQL]事务

1.事务特性AICD

其实,事务的本质就是若干个数据库操作的集合.并且这些集合都满足AICD的特性.

1.1原子性Atomicity

一个事务数据库中的最小执行单位,不能再拆分啦.

事务中的操作要么全部执行成功,要么全部执行失败.

1.2隔离性Isolution

事务之间不相互影响.

比如:脏读,未提交读,幻读,不可重复度,都是事务不同的隔离级别所导致的问题.使得事务之间相互影响.

在保证数据操作满足原子性的同时,也要保证其他事务的执行不会影响到本次事务的执行.

1.3一致性Consistency

身高不能为负数,年龄不能小于0等;甲乙两人转账,他们的金额之和一定是相等的.

数据库中的数据要符合现实世界中的客观规律.

1.4持久性Durability

事务的结果要存在硬盘当中,存储在内存当中如果断电数据就丢失了.

本次事务的操作结果[提交之后],都应该被保存到磁盘当中,无论发生什么系统事故也不会影响本次事务的修改结果.

2.并发执行带来的一致性问题

对这些一致性问题所带来的问题的危害进行排序:

脏读>不可重复读>幻读

性能:高---------------->低

2.1脏读

如果一个事务读取到了另一个未提交事务修改过后的数据时,就意味着发生了脏读现象。

 一个事务还没提交呢,该事务所做的变更就能被其他事务看到。

2.2不可重复读

如果一个事务修改了另一个未提交事务读取的数据,就意味着发生了不可重复度现象。

 在当前事务当中,相同的一句select语句所查询到的结果不一致。

2.3幻读

如果一个事务先根据某些条件搜索查询出一些记录,在该事务未提交时,另一个事务写入了一些符合那些搜索条件的记录时,就意味着发生了幻读。[这里的写入可以使insert,delete,update操作]

注意幻读和不可重复度的区别,并不是说两次读取结果集不同就是幻读。幻读侧重的是某一次select操作得到的结果集的数据无法支撑后续的业务操作。

具体为:select某个记录显示不存在,然后准备insert[delete/update]时,发现该记录已经存在,而使得本次insert[delete/update]执行失败,无法插入。而此时就发生了幻读。

3.四种隔离级别

3.1未提交读 read uncommitted

一个事务还没提交,它所做的更改就能被其他事务看到.

可能导致的一致性问题:脏读,不可重复读,幻读.

3.2已提交读 read commited

一个事务提交之后,它所做的变更其他事务才可以看到.

可能导致的一致性问题:不可重复读,幻读.

3.3可重复读 repeatable read

一个事务执行过程当中所看到的数据集,总是跟事务在启动的时候看到的保持一致.

并且在可重复读的隔离级别下,未提交变更对其他事务是不可见的.

可能导致的一致性问题:幻读.

3.4可串行化 serializable

通过加锁的方式避免的并发访问.没有一致性问题.

对同一行记录会加"写"锁,"读"会加读锁.当出现"读-写","写-写"锁重读的时候,后访问的事务就必须等待前一个事务执行完成,才能继续执行.

不同隔离级别可能遇到的一致性问题
隔离界别脏读不可重复读幻读
未提交度可能可能可能
已提交度不可能可能可能
可重复读不可能不可能可能
串行化不可能不可能不可能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/215298
推荐阅读
相关标签
  

闽ICP备14008679号