数据库事务隔离级别
1、为什么会出现数据库的隔离级别呢?
数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题.
四种事务隔离级别:
一:读未提交 read uncommitted
二:读已提交 read committed ( oracle默认 )
三:可重复读 repeatable read ( mysql默认 )
四:串行事务 serializable
由事务隔离级别产生的几个常见问题:
读未提交,可导致----->>>> 脏读
读已提交,可导致----->>>> 不可重复读
重复读,可导致 ----->>>> 幻读
2、什么是脏读?
读到的数据是未确认的数据 ( 未提交 ) , 如果另一个客户端在操作过程中,回滚了操作.那么用户读到的数据其实是无效数据.
3、什么是不可重复读?
是指一个客户端在同一个事务中多次读取相同的数据 , 结果不一致
4、什么是幻读?
一个客户端多次读取相同的数据,每次得到的结果都跟第一次得到的数据一样.但其实数据已经发生了变化.但是查不到结果.
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;
5、脏读的演示:
6、读已提交演示 ===>>> 不可重复读
7、幻读的演示
8、串行化事务的演示