【数据库】并发产生的问题

举报
DevFeng 发表于 2021/09/27 16:23:57 2021/09/27
【摘要】 Transaction isolation is one of the foundations of database processing. Isolation is the I in the acronym ACID; the isolation level is the setting that fine-tunes the balance between performance an...

Transaction isolation is one of the foundations of database processing. Isolation is the I in the acronym ACID; the isolation level is the setting that fine-tunes the balance between performance and reliability, consistency, and reproducibility of results when multiple transactions are making changes and performing queries at the same time.

事务隔离是数据库处理的基础之一。

隔离是首字母缩写ACID中的I;

隔离级别是在多个事务同时进行更改和执行查询时,对性能与结果的可靠性、一致性和再现性之间的平衡进行微调的设置。

序号 类型
1 READ UNCOMMITTED
2 READ COMMITTED
3 REPEATABLE READ
4 SERIALIZABLE

并发问题类型

序号 问题
1 丢失更新
2 不可重复读
3 读“脏”数据
select @@tx_isolation  查看当前会话隔离级别
查询结果
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
REPEATABLE READ 

这是InnoDB的默认隔离级别。
同一个事务中的一致读取读取第一次读取建立的快照。
这意味着,如果在同一个事务中发出几个普通(非锁定)SELECT语句,这些SELECT语句彼此之间也是一致的。
READ COMMITTED

即使在同一个事务中,每次一致的读取都会设置并读取自己的刷新快照
READ UNCOMMITTED

SELECT语句以非锁定方式执行,但也可能使用较早版本的行。因此,使用此隔离级别时,此类读取是不一致的。这也被称为脏读。否则,此隔离级别的工作方式类似于READ COMMITTED。
SERIALIZABLE

这个级别类似于REPEATABLE READ,但是InnoDB隐式地将所有普通的SELECT语句转换为SELECT…如果禁用了自动提交,则锁定共享模式。如果启用了自动提交,则SELECT是它自己的事务。因此,可以知道它是只读的,如果作为一致(非锁定)读取执行,则可以序列化,并且不需要为其他事务阻塞。(如果其他事务修改了所选的行,则强制一个普通的SELECT阻塞,请禁用自动提交。)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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