数据库事务的隔离级别

事务的隔离级别分为以下四种:

这里写图片描述


对事务的基本操作
/*查看事务的隔离级别*/
SELECT @@tx_isolation;

/*查看事务是否自动提交*/
SELECT @@autocommit;

/*设置隔离级别为读已提交*/
SET tx_isolation='READ-UNCOMMITTED';

/*设置隔离级别为读已提交*/
SET tx_isolation='READ-COMMITTED';

/*设置隔离级别为可重复读*/
SET tx_isolation='REPEATABLE-READ';

/*设置隔离级别为可串行化*/
SET tx_isolation='Serializable';

/*设置事务不自动提交*/
SET autocommit=off;

读未提交:
开启一个事务T1之后,进行相关的操作,还没有提交的前,开启另一个事务T2,在READ-UNCOMMITTED这种事务隔离级别下,T2是能够感知事务TI所进行的操作的,即使事务T1并没有提交。
可能出现的问题:出现脏数据。如事务T1把某条数据更新了,还没有进行提交,这时候事务T2查询到刚才更新的数据,事务T1遇到了一个异常进行回滚,还原到之前的数据,而此时事务T2之前读取到的数据相当于就是无效的数据,我们称之为‘脏数据’。


读已提交
为了防止在脏数据的产生,可以事务的隔离级别提升到READ-COMMITED级别。即只有在一个事务提交之后,另一个事务才能够感知。
可能出现的问题:不可重复读。即在事务T1有两次查询,第一次查询的时候,比如查询id=1的username为张三,此时事务T2将id=1的username改为了李四,而事务TI再进行第二次查询的时候,会发现同一个事务中的两次查询竟然不一样,这时候我们称之为‘不可重复读’.


可重复读
为了解决读已提交中的出现的问题,可以将事务的隔离界别提升到REPEATABLE-READ。即在一个事务T1进行操作的时候,不允许另一个事务T2对T1操作的数据项进行更新操作。
可能出现的问题: 幻读,虽然事务T1在进行相应操作的时候,事务T2不能对事务T1操作的数据项进行跟新,但是可以惊醒Insert或者delete操作。比如事务T1查询id>1的开始有1条数据的话,提示事务T2插入的一条数据,其Id大于1,则事务在进行查询的时候,则数据的记录数则不相同了,对此,我们称之为‘幻读’。


可串行化
事务的最高级别,事务应该一条一条的进行操作,相应的其操作的吞吐量也会大大降低。

mysql中,事务的隔离级别默认的为REPEATABLE-READ。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值