事务有四大特性:
原子性
概念性理解:事务是不可分割的一部分,要么同时执行成功,如果有一个执行失败就会全部回滚。
业务型的理解:我有一百,给你转五十,转失败以后回滚,我这边还会是一百。
一致性
概念性的理解:是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
业务型理解:我有一百,转你五十,我这有五十,你那有五十。
隔离性
概念性的理解:一个事务的执行不能被其它事务干扰。
业务型理解:我给你转一百块钱,我这边正在处理转账过程,还未转成功的时候,其它的线程不允许进来读取数据,现在不允许查账。
我有一百块钱,我给你转五十,转的过程中,不允许再执行转账的功能,除非第一个转账成功后,再执行下一个请求的转账。
表的锁机制:行级锁,悲观锁、乐观锁、排它锁、表级锁
持久性
概念性的理解:持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
业务型理解:存钱,存一百块钱,银行被炸掉了,我的钱还是有的。
代码上的理解:在AOP里定义事务处理,根据传播特性定义。或是用注解@transcational
我在一个方法里同时执行添加和修改或同时执行多个操作的时候,
代码里不允许报错否则全部回滚