解决并发事务造成的脏读,幻读,不可重复读问题

简介: 解决并发事务造成的脏读,幻读,不可重复读问题

解决并发事务造成的脏读,幻读,不可重复读问题:



Mysql的四种隔离级别.

未提交读(READ UNCOMMITTED):

在这个隔离级别下,其他事务可以看到本事务没有提交的部分修改,因此会造成脏读的问题(读取到了其他事务未提交的部分,而之后该事物进行回滚)


这个级别的性能没有足够大的优势,但是又有很多的问题,因此很少使用.


已提交读(READ COMMITTED):

其他事务只能读取到本事务已提交的部分,这个隔离级别有不可重复读的问题,在同一个事务内的两次读取,拿到的结果竟然不一样,因为另一个事务对数据进行了更改.


可重复读(REPEATABLE READ):

可重复读隔离级别解决了上面不可重复读的问题,但是仍然有一个新问题就是幻读,当你读取id>10的数据行时,对涉及到的所有行加上了读锁,此时另外一个事务新插入一条id=11的数据,因为是新插入的,所以不会触发上面的锁的排斥,那么进行本事务下的一次查询会发现有一条id=11的数据,而上次的查询操作并没有获取到,再进行插入就会有主键冲突的问题


可串行化(SERIALIZABLE):

这是最高的隔离级别,可以解决上面提到的所有问题,因为他强制将所有的操作串行执行,这会导致并发性能急速下降,因此也不常用.

目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
事务及事务的隔离级别
事务及事务的隔离级别
|
12月前
|
存储 关系型数据库 MySQL
幻读的探讨
幻读是数据库中常见的一种问题,它指的是在一个事务中,由于并发操作而导致同一个查询多次读取的结果不一致的现象。在这篇博客文中,我将详细探讨幻读的概念、原因和解决办法。
65 0
|
2月前
|
SQL 关系型数据库 MySQL
对数据库事务理解以及脏读、不可重复读以及幻读问题
对数据库事务理解以及脏读、不可重复读以及幻读问题
|
2月前
|
SQL
事务的隔离级别
事务的隔离级别 多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题。设置不同隔离级别就可以解决 1.脏读:一个事务,读取到另一个事务中没有提交的数据 2.不可重复读,在同一个事务中,两次读取的数据不一样 3.幻读:(dml)一个事务操作数据表中记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改 隔离级别 1.read uncommitted:读未提交 产生问题:脏读、不可重复读、幻读 2.read committed:读已提交 产生问题:不可重复读、幻读 3.repeatable read:可重复读 产生问题:幻读 4.serializable:串行
27 0
|
2月前
|
SQL 数据库
|
2月前
|
存储 SQL 关系型数据库
不可重复读
不可重复读
|
12月前
|
数据库
脏读、幻读、不可重复读
脏读是指在数据库事务中,一个事务读取了另一个事务未提交的数据。当一个事务进行数据修改但还未提交时,另一个事务读取了这个未提交的数据。如果发生了回滚操作,读取到的数据将是无效的。脏读可能会导致数据的不一致性和错误的结果。
47 0
|
12月前
|
数据库
数据库事务的并发问题 (脏读、幻读、不可重复读)
数据库事务的并发问题 (脏读、幻读、不可重复读)
95 0
|
12月前
|
算法 关系型数据库 MySQL
事务的隔离级别和对应的问题
事务的隔离级别和对应的问题
图解脏读、幻读、不可重复读
图解脏读、幻读、不可重复读
59 0