数据库事务相关问题
数据库并发问题
丢失更新:两个事务都在修改同一个表格,最终有个事务的修改看不到。
脏读:读到了其他事务更改但未提交的中间数据。
不可重复读:同一事务中两次读取的内容不一致,读取了其他事务提交的数据,可重复读记录某次读取的结果,在该事务提交前,读取的数据都是一致的。
幻读:事务读取表格的内容,取决于修改表格的事务发生在查询之前还是查询之后,序列化可以使查询等待修改完成。
数据库隔离级别
读未提交:可以读另一个事务没有提交的数据,如果另一个事务更改多次数据或者最后进行回滚操作,会导致脏读,同时由于读取的是未提交的数据,因此有可能会丢失最终的更新数据。
读已提交:只能读已提交的事务的数据,但事务中有两次查询时,同时另外一个事务在进行更改时,会导致不可重复读和幻读。
可重复读:同一个事务多次读的数据相同,但是读取结果会随着另一个修改数据事务提交时间变化,会导致幻读。
序列化:严格规定各事务的执行次序,当事务被定义为序列化隔离级别时,当其他事务对于序列化事务的数据进行修改时,序列化事务会等待修改数据完成再进行查询,解决了幻读问题。
| 级别\问题 | 丢失更新 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|---|
| 读未提交 | ||||
| 读已提交 | 解决 | |||
| 可重复读 | 解决 | 解决 | 解决 | |
| 序列化 | 解决 | 解决 | 解决 | 解决 |
使用说明
可重复读是大部分事务的默认隔离级别。
当数据更新操作较少时,使用读已提交或者读未提交。
当需要避免幻读问题时,使用序列化对需要划定执行顺序的事务进行排序。

浙公网安备 33010602011771号