MySQL的默认隔离级别(二)

举报
赵KK日常技术记录 发表于 2023/07/21 23:13:45 2023/07/21
【摘要】 MySQL的默认隔离级别 1. 事务隔离级别的介绍在数据库管理系统中,事务隔离级别是指多个并发事务之间的隔离程度,也就是控制并发事务之间相互之间的干扰程度。隔离级别提供了一种保护机制,确保同时运行的事务不会相互干扰造成数据异常。常见的事务隔离级别有以下四种: 1.1 读未提交(Read Uncommitted)在该隔离级别下,一个事务可以读取另一个事务尚未提交的数据修改。这种隔离级别最低,...

MySQL的默认隔离级别

1. 事务隔离级别的介绍

在数据库管理系统中,事务隔离级别是指多个并发事务之间的隔离程度,也就是控制并发事务之间相互之间的干扰程度。隔离级别提供了一种保护机制,确保同时运行的事务不会相互干扰造成数据异常。

常见的事务隔离级别有以下四种:

1.1 读未提交(Read Uncommitted)

在该隔离级别下,一个事务可以读取另一个事务尚未提交的数据修改。这种隔离级别最低,会导致脏读(Dirty Read),即读取到其他事务还未提交的数据更改,可能会导致数据不一致。

1.2 读已提交(Read Committed)

在该隔离级别下,一个事务只能读取已经被提交的数据。这种隔离级别避免了脏读,但可能会导致不可重复读(Non-Repeatable Read),即在同一事务中,两次读取同一数据可能得到不同的结果,因为其他事务可能已经修改了该数据。

1.3 可重复读(Repeatable Read)

在该隔离级别下,一个事务在执行过程中多次读取同一数据会得到相同的结果,即使其他事务对该数据做了修改。这种隔离级别避免了不可重复读,但可能会导致幻读(Phantom Read),即在同一事务中,两次查询返回的数据行数不一致,因为其他事务可能已经插入了符合查询条件的数据。

1.4 串行化(Serializable)

在该隔离级别下,事务串行执行,每个事务只能依次执行,不存在并发。这种隔离级别避免了脏读、不可重复读和幻读,但同时也降低了并发性能。

2. MySQL的默认隔离级别

MySQL的默认隔离级别是"可重复读"(Repeatable Read)。这保证了在同一事务中多次读取同一数据时,结果始终一致。在可重复读隔离级别下,MySQL通过多版本并发控制(MVCC)机制实现隔离。

3. 设置MySQL的隔离级别

在MySQL中,可以通过下述语句设置隔离级别:

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
  • SESSION:设置当前会话的隔离级别,只对当前会话生效;
  • GLOBAL:设置全局隔离级别,对新启动的会话生效;
  • READ UNCOMMITTED:设置隔离级别为读未提交;
  • READ COMMITTED:设置隔离级别为读已提交;
  • REPEATABLE READ:设置隔离级别为可重复读;
  • SERIALIZABLE:设置隔离级别为串行化。

需要注意的是,设置隔离级别可能会导致并发性能的降低,需要根据实际需求进行权衡和选择。

4. 总结

事务隔离级别是控制并发事务之间隔离程度的重要机制,提供了保护数据库一致性的手段。MySQL的默认隔离级别是"可重复读",通过多版本并发控制实现隔离。在实际应用中,需要根据业务需求和性能要求选择适当的隔

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。