1.事务用来解决的问题
确保一组数据库操作都执行或者都不执行。使这一组操作对外具有原子性。
2.数据库事务
数据库事务最终支持方是数据库,数据库支持事务我们在代码中写相应事务才有意义。
2.1支持事务的数据库
mysql数据库以InnoDB作为引擎的表,MyISAM引擎是不支持事务的,oracle,非关系型数据库redis也支持事务
3.spring事务
不同的orm实现事务的方式不一样,为了屏蔽差异,spring使用AOP,通过注解方式提供事务支持。
因为使用了AOP,所以方法必须是public,并且不可以内部方法间调用,因为这样AOP就不起作用。
4.事务四个属性
ACID
- 原子性(Atomicity)事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
- 一致性(Consistency)几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
- 隔离性(Isolation)事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
- 持久性(Durability) 对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障
5.事务导致的问题
事务的并发执行会导致出现一些问题。脏读,不可重复读和幻读,还有更新丢失。参考
事务的隔离级别就是解决这个问题的。不同数据库默认隔离级别不同,mysql默认是Repeatable read。隔离级别越高并发性越差。oracle默认是Read committed 。
6.注意事项
避免在事务中做很耗时的操作,这会导致长事务,占用过多数据库资源。
7.事务种类
- 本地事务
- 分布式事务