您的位置:首页 > 数据库 > MySQL

mysql事务之提交读(Read Committed)

2016-03-29 21:46 302 查看
1,Read Commited定义:

在提交读(READ COMMITTED)级别中,基于锁机制并发控制的DBMS需要对选定对象的写锁(write locks)一直保持到事务结束,但是读锁(read locks)在SELECT操作完成后马上释放(因此“不可重复读”现象可能会发生,见下面描述)。和前一种隔离级别一样,也不要求“范围锁(range-locks)”。

简而言之,提交读这种隔离级别保证了读到的任何数据都是提交的数据,避免读到中间的未提交的数据,脏读(dirty reads)。但是不保证事务重新读的时候能读到相同的数据,因为在每次数据读完之后其他事务可以修改刚才读到的数据。

提交读保证我们读到的数据都是事务提交后的数据,这样子就保证了程序中数据的正确性,在我们的应用中,基本都是使用的Read Commited隔离级别。

2,场景

我们首先设置我们的数据库事务级别为提交读,开启事务1,对student表做更新,但是不对其提交,再开启事务2对数据进行读取。

start TRANSACTION;

select * from student;

update student set name = 'a1' where id = 1;

select * from student;

在该事务中,更新数据后,我们查看student表,其中的数据已经发生了变化。我们开启事务2对数据查询。

select * from student;

在该事务中查询到的student还是旧数据,对事务1进行提交,再在事务2中查询,数据则获取到的为我们最新的数据。

再次期间事务2和事务1中读取数据,事务1未提交时两个读取的数据不一致,可能发生不可重复读。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: