数据库事务

隔离级别

未提交读(READ UNCOMMITTED)

事务中的修改,即使没有提交,对其他事务也是可见的。

提交读(READ COMMITTED)

一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其他事务是不可见的。

可重复读(REPEATABLE READ)

保证在同一个事务中多次读取同样数据的结果是一样的。

可串行化(SERIALIZABLE)

强制事务串行执行。需要加锁实现,而其它隔离级别通常不需要。

不可重复读,幻读
不可重复读重点在于update和delete,而幻读的重点在于insert。
解决办法,select * from test where id=1 for update;(加锁)

主流数据库基本都使用 Multi-version Concurrency Control (MVCC) 控制事务。

PostgreSQL(事务回滚迅速),Oracle 提交读
MYSQL 可重复读