mysql事务并发问题及隔离级别
2020-02-20 10:02:06 0 举报
mysql并发事务问题及4种隔离级别
作者其他创作
大纲/内容
Read Uncommitted (未提交读)事务未提交对其他事务也是可见的,--会出现脏读、不可重复读、幻读Read Committed (提交读)一个事务开始之后,只能看到自己提交的事务所做的修改 --解决了脏读问题,还会出现不可重复读、幻读Repeatable Read (可重复读) 在同一个事务中多次读取同样的数据结果是一样的 —解决了不可重复读问题,未解决幻读问题Serializable (串行化)最高的隔离级别,通过强制事务的串行执行 —解决了所有问题,但是没有并发,不推荐
结果:第一次20,第二次25
Transaction A
进行年龄大于18岁的范围查找,事务A查到了一条数据,接着事务B又插入了一条数据,然后事务A查询到了两条数据,这就是造成了幻读
id
name
age
1
tom
20
Transaction B
2
jerry
19
25
select * from user where id =1
不可重复读
beginupdate user set age = 25 where id = 1commit
事务B将tom的年龄修改成了25但是没有提交,然后事务A读取到了tom的25,接着事务B进行了回滚,tom的年龄还是20,这样,事务A读取到的数据就是脏数据,这就是脏读
事务A读取到了tom的年龄是20,然后事务B将tom的年龄改为了25,然后事务又读取了一次数据,两次的数据不一致,这就是不可重复读
结果:25
幻读
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
mysql中通过事务隔离级别来解决:SQL92 ANSI/ISO标准:
select * from user where age >18
select * from user where age > 18
结果:第一次一条数据,第二次两条数据
脏读
update user set age = 25 where id = 1
ROLLBACK(回滚)
收藏
收藏
0 条评论
回复 删除
下一页