mysql事务

一、事务的特性:

1.原子性

保证一个事务中数据要么全部成功提交,要么全部失败回滚,不能只执行其中一部分操作。

2.一致性 

事务的执行不能破坏数据库的完整性和一直性,在事务的执行前后数据库都必须处于一致性状态。

3.隔离性

未授权读取(未提交的数据读取),授权读取(已提交数据的读取),可重复读取和串行化
 

4.持久性

一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态
 

注:mysql的MyISAM引擎不支持事务

二、查看数据库引擎

#查看数据库引擎
show engines;

 

三、配合spring框架使用方法以及配置:

1.spring配置事务

编程式:通过编码的方式手动启用、提交或回滚事务,粒度更细,但更麻烦。

声明式:通过在方法或类或接口上添加注解进行包装,无侵入地实现事务,更方便,但粒度更大。

2.配置事务管理器

<!-- 开启事务注解驱动,基于注解的声明式事务 -->  
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
	 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource" />
</bean>

四、简单测试使用编程式事务

1.数据库表中原数据:

 2.对表进行添加和删除操作(使用100/0模拟引发错误)

@Override
public void shiwu(Liuyan record) {
		// 开始事务
		TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
		try {
			Liuyan liuyan = new Liuyan();
			liuyan.setLyid(utils.getUUID());
		    liuyanMapper.insertSelective(liuyan);
			liuyanMapper.deleteByPrimaryKey("7bebc14c-ba49-418f-b762-fb8a45e72502");
			int ss=100/0;//模拟引发错误
			transactionManager.commit(status);// 提交事务
		} catch (Exception e) {
			// TODO: handle exception
			// 异常回滚,并不一定要在try...catch中
			e.printStackTrace();
			transactionManager.rollback(status);
		}
	}

3.执行后数据库未变:

4.删除(100/0错误)后执行事务数据库变化

 已经不存在(7bebc14c-ba49-418f-b762-fb8a45e72502)这条数据并且随机增加了一条。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yjm2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值