一 .事务的四大特性
1.原子性:事务是不可分割的一个最小单元
2.一致性:事务要不一起是一起提交成功,要不就是一起失败
3.隔离性:事务里的操作不能被其他事务干扰吗,并发事务之间互不干扰
4.持久性:事务提交后会改变数据库,接下来这个事务发生故障也不会对数据库有影响
二.事务并发时的常见问题
原因:同一时间可能有多个事务并发操作数据库。
出现的三个问题:
1.脏读:A事务读取到了B事务更新但未提交的字段,此时如果B事务回滚了,则A事务读取到的字段数据就是无效的。
2.不可重复读:A事务读取数据库中的一个字段但还未提交,接着B事务更新了这个字段,A事务再读这个数据的时候就不一样了。
3.幻读:A事务读取数据库一个字段(假如这个字段有5个数据),接着B事务更新后给这个字段加了一些数据(比如说加了3条数据),然后A事务再读这个字段时,就会发现多了几行数据。。。。(本质是因为数据库前后数据不一致)
三.四种隔离级别
1.read uncommitted(读未提交):允许事务读其他未提交数据(可能出现脏读,不可重复度,幻读)
2.read committed(读已提交):只允许读其他事务已提交的数据(可防止脏读,可能出现不可重复度,幻读)
3.repeatable read(可重复读): 确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新(update)。(可以避免脏读和不可重复读,但幻读仍然存在)
4.serializable(串行化):确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,所有并发问题都可避免,但性能十分低下(因为你不完成就都不可以弄,效率太低)
了解: oracle支持两种事务隔离级别:read committed、serializable。
oracle默认的事务隔离级别是:read committed。
mysql的默认事务隔离级别是:repeatable read。