sql标准定义了4种隔离级别,包含了一些具体规则,用来限定事物内外的那些变化是可见的,哪些是不可见的。
低级别的隔离级一般支持更高的并发处理,拥有更低的系统开销。
1到4,4种隔离级别:
Read Uncommitt(读取未提交的内容)
Read Conmmitted(读取提交内容)
Repeatable read(可重读)
Serializable(可串行化)
查看事物隔离级别命令:
SELECT @@tx_isolation;
修改事物隔离级别命令:
set tx_isolation='read_committed'
脏读的含义:读取到未提交的数据。
新建一个表:
CREATE TABLE tes(
id INT PRIMARY KEY,
num INT
)
INSERT INTO tes VALUES(1,1),(2,2),(3,3);
启动一个事物修改事物级别为第一级别运行:
start transaction;
SELECT *FROM tes
再启动一个事物修改表中的数据:
start transaction;
update tes set num=10 where id=1;
select * from tes;
ROLLBACK;
SELECT *FROM tes;
再在第一个事物中查询:
在第二个事物没有提交的情况下,第一个事物得到了第二个事物修改后的数据。
如果在第二个事物回滚后,第一个事物读到的数据又回到未修改的状态
这样就称为脏锁。
第一级别:Read Uncommitt(读取未提交的内容)
1.所有事物都可以看到其他未提交事物的执行结果。
2.该级别较少用于实际场景,性能没有优势。
3.会进行脏读,读取到未提交的数据。