数据库具有不同的隔离级别,不同的隔离级别有不同特性,在使用的时候要小心,特别是在Race Condition的情况下。
- 读未提交read uncommited。
可以读取到尚未提交的内容,级别最低,会出现脏读。
- 读已提交read commited
只有已提交的内容会被读取到,会出现幻读,在同一个事务中,开始读取到的数据,和后面相同条件读取到的数据,可能不一样。
- 可重复读read repeatable
在同一个事务中间,同一个条件读取到的数据,永远是一样的。一般采用快照的办法来实现,在读的事务过程中,其他事务允许继续写,但写入的不影响读取。
- 序列化读serialable read
看起来事务是序列化的(看起来如此,实际上不一定),就是事务在Race Condition下看起来是串行执行的。
悲观锁
在操作数据的时候先锁定,在竞争比较密集的情况下用。
乐观锁
在操作数据的时候不锁定,采用版本比较等CAS方法写入,写入失败再尝试锁定。