数据库隔离级别教程
这里我们以mysql为例
mysql有四种隔离级别:可读未提交,只读已提交,可重复读,序列化。
可能会出现的三个问题:脏读,不可重复读,幻读。
首先,对数据库的操作可以分为四种:读操作和更新操作,插入操作,删除操作(可看做更新操作)。
可读未提交:顾名思义,这种隔离级别下,其他事务可以读取到未提交事务所做的更改。这种隔离级别并没有对数据库做任何限制。
只读已提交:当一个事务A对一条数据进行更新操作的时候,会为这条数据加上行锁。这时,其他事务B就不能读取到这条数据。当事务A结束,事物B又可以读取这行数据,但是,事务B如果进行了两次读操作,就可能得到不同的结果。比如事务B进行读操作,事务A开始更新操作,事务A结束,事务B进行读操作。
可重复读:当事务A对一条数据进行读操作的时候,会为它加上行锁,这样,其他事务就不能更改这条数据,实现了可重复读。但是,可重复读是针对更新操作的,如果事务B对整张表进行一个范围的读操作,可能会读取到未提交的插入数据。
序列化:这种隔离级别下,所有的事物顺序执行,上面的问题都不会出现,但效率很低,一般不会用。