MySQL事务隔离级别与锁

来源:互联网 发布:安卓手机运行java游戏 编辑:程序博客网 时间:2024/06/05 18:36
脏读:数据1;A事务修改2未提交,B事务查看2,A事务ROLLBACK,B事务看到不正确数据。
不可重复读:A事务查看,B事务修改提交,A事务再次查看,数据不一样。
reaptable red可重读:A事务查看,B事务不能提交修改。
幻读:A事务修改全部行,B事务插入新行,A事务查看新行没被修改
serializable:事务B只能等到A提交才能插入新数据。


四种隔离级别:
1、read uncommited读未提交数据:所有的事务都可以“看到”未提交事务的执行结果;会导致脏读、不可重复读和幻读的问题的出现
2、read commited读已提交数据:一个事务在开始时,只能"看见"已提交事务所做的改变;Oracle和sql server默认的级别,可以避免脏读,但不可重复读和幻读问题仍然会出现。
3、Repeatable red可重读:确保同一事务的多个实例在并发读取数据时,会看到同样的行。
事务在读取某数据的瞬间(就是开始读取的瞬间),必须先对其加 行级共享锁,直到事务结束才释放;
事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。
4、Serializable可串行化:最高的事务隔离级别,每个读的数据上加上共享锁
事务在读取数据时,必须先对其加 表级共享锁 ,直到事务结束才释放;
事务在更新数据时,必须先对其加 表级排他锁 ,直到事务结束才释放。


隔离级 脏读可能性 不可重复读可能性幻读可能性 加锁读
READ UNCOMMITED
READ COMMITED
REAPTABLE READ
SERILIZABLE


事务的隔离级别通过锁机制实现


共享锁(S锁,读锁):若事务T对数据对象A添加S锁,则事务T允许读取A但不允许修改A,其他事务只能对A加X锁
由读表操作加上的锁,加锁之后其他用户只能获取该表和行的共享锁,不能获取排它锁,也就是只能读不能写。


排它锁(X锁,写锁):若事务T对数据对象A添加X锁,则只允许T读取和修改A,其他事务不能再对A添加任何类型的锁,直到T释放此锁。
由写表操作加上的锁,加锁之后其他用户只能对表进行读操作,而不能进行写操作,直到事务结束才释放。


四种隔离级别,开启事务,默认对表数据加上共享锁,其他事务只能对表进行读操作,而不能进行写操作,直到事务结束才会被释放。
原创粉丝点击