数据库专题 JDBC事务操作和事务的四个特性以及四个隔离级别 + 事务案例

事务

事务说白了就是做某一套事情的全部流程,如果其中的某一个环节出现错误了,那么就不能继续进行下去,在这个流程中,发生错误之前的操作也要撤回。

要么走完一整个流程,要么就回到最初的状态,不允许不完整的执行。
同时在一个流程在被操作的时候,只能有一个操作者。操作前后发生的变化要一致,符合事实。

其实和现实生活中的要求是一致的。只不过在这里叫做事务。

事物的回滚:只要有一个子模块失败了,就让所有的操作(数据)重新回到最原始的状态
事物的提交:所有的子模块全部正确的执行,整个事物完成

JDBC事务测试代码

Con.setAutoCommint(boolean) 设置成false改为手动提交,必要要手动执行commit方法才回去更改数据库 ,jbdc默认的提交方式是自动提交 true
Rollback 事物回滚,回到最原始的状态

	@Test
public void test1() {
	Connection con=JdbcUtil.getConnection();
	PreparedStatement ps=null;
	try {
		//将事物的提交方式改成手动提交,默认是true自动提交
		con.setAutoCommit(false);
		//将张三的账户减去1000元
		ps = con.prepareStatement("update counts set money=money-1000 where id =1");
		ps.executeUpdate();
		System.out.println(1/0);		//手动设置的错误,为了测试
		//将李四账户加1000
		PreparedStatement p1=con.prepareStatement("update counts set money=money+1000  where id =2");
		p1.executeUpdate();
		con.commit();//所有的操作都正确执行了,最后手动将事物提交
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		try {
			System.out.println("出现异常,事物回滚了");
			con.rollback();//将事物回滚,回到最初的状态
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	JdbcUtil.close(con, ps, null);
}

事务的四个特性

1:原子性:事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;

2:一致性:事务执行前和执行后必须处于一致性状态,

例:用户A和用户B的前加起来一共是30000; 无论AB用户之间是如何相互转换的,事务结束后两个用户的钱加起来还是30000,这就是事务的一致性。

3:隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;

4:持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事物的操作

事务的四个隔离级别

1、Read uncommitted(读未提交):最低级别,任何情况都会发生。
2、Read Committed(读已提交):可避免脏读的发生。
3、Repeatable read(可重复读):可避免脏读、不可重复读的发生。
4、Serializable(串行化):避免脏读、不可重复读,幻读的发生。一般用于银行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值