Mysql事务
1.什么是事务?
事务是一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)。
一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。
2.事务的要素是什么?
ACID
A:原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
C: 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
I:隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
D:持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
3.事务的隔离级别
一个数据库可能拥有多个客户端来访问,这些客户端并发访问数据库的时候,如果没有采取必要的隔离措施,会存在以下问题:
1.脏读
2.不可重复读
3.幻读
我们直接使用数据库的锁机制管理会变得很复杂,数据库给我们提供了不同的事务隔离级别,只要设置了事务隔离级别以后,数据库就会分析事务中的sql语句,并自动选择合适的锁。
4.基于注解的隔离级别设置
@Transactional(isolation = Isolation.READ_UNCOMMITTED) //只需要在注解的属性里面进行设置即可,非常的方便
小结一下:
使用 @Transactional 在需要进行事务控制的类或是方法上修饰,注解可用的属性同 xml 配置方式,例如隔离级别、传播行为等。
注解使用在类上,那么该类下的所有方法都使用同一套注解参数配置。
使用在方法上,不同的方法可以采用不同的事务参数配置。
2.如果是使用的ssm框架爱,那么Xml配置文件中要开启事务的注解驱动<tx:annotation-driven />
本文来自博客园,作者:程序员hg,转载请注明原文链接:https://www.cnblogs.com/hg-blogs/p/15832176.html