0
点赞
收藏
分享

微信扫一扫

MySQL事务(二)——事务的隔离级别

程序小小黑 2022-03-14 阅读 106

 数据并发问题:

脏写:

如果事务 A 修改了 另一个 未提交 事务 B 修改过 的数据,那就意味着发生了 脏写

脏读:

对于两个事务 A、B,A 读取 了已经被 B 更新 但还 没有被提交 的字段。

之后若 B 回滚 ,A 读取 的内容就是 临时且无效 的。

不可重复读:

对于两个事务A、B,A 读取 了一个字段,然后 B 更新 了该字段。 A 再次读取 同一个字段, 值就不同 了。

幻读:

对于两个事务 A、B, A 从一个表中 读取 了一个字段, 然后 B 在该表中 插 入 了一些新的行。

如果  A 再次读取 同一个表 , 就会多出几行。那就意味着发生了幻读。

隔离级别:

READ UNCOMMITTED

所有事务都可以看到其他未提交事务的执行结 果。不能避免脏读、不可重复读、幻读。

READ COMMITTED :

一个事务只能看见已经提交事务所做 的改变。 可以避免脏读,但不可 重复读、幻读问题仍然存在。

REPEATABLE READ :

事务A在读到一条数据之后,此时事务B对该数据进行了修改并提 交。

那么事务 A 再读该数据,读到的还是原来的内容。

可以避免脏读、不可重复读,但幻读问题仍 然存在。这是 MySQL 的默认隔离级别。

注: 对于SQL标准来讲,该隔离级别无法解决幻读问题

        但对于MySQL来讲,该隔离级别可以解决幻读问题

SERIALIZABLE :

确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作。 所有的并发问题都可以避免,但性能十分低下。

注: 所有的隔离级别都不允许脏写的情况发生

相关命令:

查看 MySQL当前的隔离级别:

5.7.20 以前:  show  variables  like  ' tx_isolation  ' ;

5.7.20 以后:  show  variables  like  ' transaction_isolation  ' ;

设置事务的隔离级别:

SET  [GLOBAL|SESSION]  TRANSACTION  ISOLATION  LEVEL  隔离级别;

#其中,隔离级别格式:

> READ  UNCOMMITTED

> READ  COMMITTED

> REPEATABLE  READ

> SERIALIZABLE

举报

相关推荐

0 条评论