MySQL数据库事务隔离级别有四种:READ-UNCOMMITTED(读未提交)、READ-COMMITTED(读提交)、REPEATABLE-READ(重复读)、SERIERLIZED(序列化读)。
要真正理解数据库事务隔离级别不能光看书,必须要上机操作,多练几次就会明白的了。上机环境有几点大家要注意的:1,把事务的自动提交功能关掉;2,把表引擎设置为InnoDB(支持事务操作);3,在做实验的时候先设置好数据库事务隔离级别;4,通过打开多个命令行窗口来模拟多个事务并发操作,一般两个窗口就可以看到效果。
- 读未提交。一个事务对数据进行了修改,但是未提交。其它事务照样能看到变化后的数据。
- 读提交。一个事务对数据进行了修改,必须提交后,其它事务才能看到变化后的数据。
- 重复读。一个事务对数据进行了修改,不管是否提交。其它已发生的事务都不能看到变化后的数据。必须刷新事务才能看到已提交的变化。
- 序列化读。事务排队来操作数据库,select语句会对表或选中的记录加锁。
总结:“读提交”是最常用的数据库事务隔离级。MySQL的默认设置是“重复读”,但是“重复读”有可能产生“幻读”的现象。至于“读未提交”和“序列化读”应用的场景就非常少了。在理解事务的时候,同时还要考虑到锁的问题。
再说一下只读事务,只读事务只是解决本次事务中数据不被其他事务影响,有点类似于可重复读的情况。