美食家大橙子 发表于 2024-9-27 08:36:33

MySQL数据库的隔离级别

MySQL数据库的隔离级别主要有以下四种:
READ UNCOMMITTED(简称RU,读未提交)
可以读取到事件未提交的数据,隔离性差,会出现脏读(当前内存读),不可重复读,幻读题目;
在这个隔离级别,全部事件都可以看到未提交事件的执行效果。在这种隔离级别上,可能会产生很多题目。所以这种隔离级别很少用于实际应用,而且它的性能也没有比其他性能好很多,而别的级别还有其他的优点。读取未提交数据,也被称为“脏读”。

READ COMMITTED(简称RC,读已提交)
可以读取到事件已提交的数据,隔离性一般,不会出现脏读题目,但是会出现不可重复读,幻读题目;
读已提交这种隔离级别是大多数数据库系统默认的隔离级别(但mysql默认的隔离级别却不是这种),满足了隔离的最早简单界说:一个事件开始时,只能望见已经提交事件所做的改变,一个事件从开始到提交前,所做的任何数据改变都是不可见的,除非已经提交。这种隔离级别也支持所谓的不可重复读。这意味着用户运行同一个语句两次,看到的效果是不同的。

REPEATABLE READ(简称RR,可重复读)
可以防止脏读(当前内存读),防止不可重复读题目,防止会出现的幻读题目,但是并发能力较差;
mysql数据库默认的隔离级别。该级别办理了READ UNCOMMITTED导致的题目。它保证了同一事件的多个实例在并发读取事件时,会看到同样的数据行。幻读指当用户读取某一范围的数据行时,另一个事件又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)
机制办理了该题目不过这会导致另外一个题目“幻读”;
SERIALIZABLE(简称SR,串行化)
隔离性比力高,可以实现串行化读取数据,但是事件的并发度就没有了;
这是事件的最高级别,在每条读的数据上,加上锁,使之不可能相互冲突;
该隔离级别是最高的隔离级别。它通过强制事件排序,使之不可能相互冲突,从而办理幻读题目。
简而言之:SERIALIZABLE是在每个读的数据行加锁,在这个级别上可能导致大量的超时和锁竞争征象,实际应用中很少使用这个级别,但假如用户的应用为了数据的稳定性,必要强制淘汰并发,
也可以选择这种隔离级别。
 
可以通过以下SQL语句查询当前的隔离级别:
SELECT @@TX_ISOLATION; 设置隔离级别的SQL语句:
SET TRANSACTION ISOLATION LEVEL
; 其中SESSION表现当前会话,GLOBAL表现全局。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL数据库的隔离级别