数据库事务,事务是指一系列逻辑上不可分割的SQL语句,事务有四大特性(ACID):一致性、原子性、隔离性、持久性。
按照个人浅显的理解,一致性是事务最基本的属性,其他的三个特性都是为了保证数据一致性存在的。
一致性是指,事务完成时数据保持一致性,处于一种有意义的状态,就比如转账,A用户转钱给B用户,如果A的钱减少了,而B的的余额却没有增加,那么我们认为此时数据不一致。
事务的原子性解决了上面的问题,转账的加钱减钱要么都发生要么都不发生。但是原子性不能完全解决一致性的问题,在多个事务并发进行的情况下,即使保证了每个事务的原子性,仍然可能导致数据不一致,列如 事务1需要将100元转入帐号A:先读取帐号A的值,然后在这个值上加上100。但是,在这两个操作之间,另一个事务2修改了帐号A的值,为它增加了100元。那么最后的结果应该是A增加了200元。但事实上,
事务1最终完成后,帐号A只增加了100元,因为事务2的修改结果被事务1覆盖掉了。
为了保证并发情况下的一致性,引入了隔离性,即保证每一个事务能够看到的数据总是一致的,就好象其它并发事务并不存在一样。
事务一旦提交,对数据库的影响是永久的,保证所有操作都是有效的。
编程式事务:在代码中手动产生事务对象、手动提交或回滚事务。
申明式事务:声明式事务建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。