数据库的事务隔离级别,是为了解决数据库并发情况下,数据读取的安全问题。
四种事务隔离级别:
- 读未提交 read uncommitted 可以读到没提交的数据
- 读已提交 read committed 只能读到事务提交后的数据
- 可重复读 repeatable read 多次读取相同的数据,每次得到的结果都一样(哪怕这些数据已经被修改)
- 串行事务 serializable 不允许读写并发(性能下降)
由事务隔离级别产生的几个常见问题:
读未提交,可导致----->>>> 脏读
读已提交,可导致----->>>> 不可重复读
重复读,可导致 ----->>>> 幻读
什么是脏读?
脏读,就是读到了没有提交的数据,这些数据,有可以会因为rollback的执行而不存在。
什么是不可重复读?
多次读取相同的数据,每次结果不一样
什么是幻读?
多次读取相同的数据,每次读到的结果都跟第一次一样,哪怕这个数据已经被修改也读不到
---------------------------------------------------------------------------------------------------------------------------------
1.查看当前会话隔离级别
select @@tx_isolation;
2.查看系统当前隔离级别
select @@global.tx_isolation;
3.设置当前会话隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;
4.开启事务
start transaction;
5.提交事务
commit;
6.回滚事务
rollback;