A-A+

Mysql事务

2019年11月22日 mysql 暂无评论 阅读 572 views 次

一、Mysql事务四种隔离级别

1、读未提交(read-uncommitted),读未提交时,读事务直接读取主记录,无论更新事务是否完成

2、不可重复读(read-committed),读提交时,读事务每次都读取undo log中最近的版本,因此两次对同一字段的读可能读到不同的数据

3、可重复读(repeatable-read),每次都读取指定的版本  --Mysql默认隔离级别

4、串行化(serializable),锁表,读写相互阻塞

 

查看当前系统mysql隔离界别:

select @@global.tx_isolation;

 

 

二、并发下事务产生的问题:脏写、脏读、不可重复读、幻读

1、什么是:脏写、脏读、不可重复读和幻读,

1、 脏读:A,B两事务,A事务会读取到B事务未提交的数据,然后B因为某些原因回滚数据,所以A就读取了B没有提交的数据,也称脏数据;

2、 不可重复读:在A事务中对同一数据两次查询不一致,可能原因是在A事务提交之前B事务对该数据进行了操作;

3、 幻读:类似于不可重复读,都是在一个事务周期内读的数据不一致,区别在于幻读是侧重于插入操作带来的影响,而不可重复读是编辑或者删除带来的影响

参考:《大白话讲解脏写、脏读、不可重复读和幻读》

 

2、解决办法:

a、脏写、脏读、不可重复读侧重于修改;——解决办法:行级锁,锁住满足条件的行;

b、幻读侧重于新增或删除。——解决办法:锁表,针对增删需要锁整个表。

 

三、事务的基本要素(ACID)

1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

 

四、MVCC (Mysql的多版本并发控制)

MVCC全称是: Multiversion concurrency control,多版本并发控制,提供并发访问数据库时,对事务内读取的到的内存做处理,用来避免写操作堵塞读操作的并发问题。

参考:

https://www.cnblogs.com/myseries/p/10930910.html

https://blog.csdn.net/SnailMann/article/details/94724197

https://www.cnblogs.com/zping/p/13994828.html

 

标签:

给我留言