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 />

 

 
posted @ 2022-01-21 23:40  程序员hg  阅读(29)  评论(0编辑  收藏  举报