数据库事务(ACID)介绍和语句

10 篇文章 0 订阅
5 篇文章 0 订阅

事务的四大特性(ACID)

事务的四大特性是:

  1. 原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。
  2. 一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。
  3. 隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。
  4. 持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

 

MySQL中的事务

在默认情况下,MySQL每执行一条SQL语句,都是一个单独的事务。如果需要在一个事务中包含多条SQL语句,那么需要开启事务和结束事务。

  1. 开启事务:start transaction
  2. 结束事务:commitrollback

在执行SQL语句之前,先执行strat transaction,这就开启了一个事务(事务的起点),然后可以去执行多条SQL语句,最后要结束事务,commit表示提交,即事务中的多条SQL语句所做出的影响会持久化到数据库中。或者rollback,表示回滚,即回滚到事务的起点,之前做的所有操作都被撤消了!

 

Connection的三个方法与事务相关:

  1. setAutoCommit(boolean):设置是否为自动提交事务,如果true(默认值就是true)表示自动提交,也就是每条执行的SQL语句都是一个单独的事务,如果设置false,那么就相当于开启了事务了;con.setAutoCommit(false)表示开启事务!!!
  2. commit():提交结束事务;con.commit();表示提交事务
  3. rollback():回滚结束事务。con.rollback();表示回滚事务

 

package cn.itcast.demo;

import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import cn.itcast.jdbc.JdbcUtils;

/**
 * 演示转账
 * @author cxf
 * 
 * 所有对Connection的操作都在service层进行的处理!
 * 明天要去处理这一问题,把所有对Connection的操作隐藏起来!这需要使用自定义的小工具!
 */
public class Demo1 {
	/**
	 * 转账方法
	 * @param from
	 * @param to
	 * @param money
	 */
	public void zhuanZhang(String from, String to, double money) {
		// 对事务的操作必须使用Connection对象!
		Connection con = null;
		try {
			con = JdbcUtils.getConnection();
			//开启事务
			con.setAutoCommit(false);

			AccountDao dao = new AccountDao();
			dao.updateBalance(con, from, -money);//给from减去相应金额
			
			if(true) {
				throw new RuntimeException("不好意思");
			}
			
			dao.updateBalance(con, to, money);//给to加上相应金额
			
			//提交事务
			con.commit();
			con.close();
		} catch(Exception e) {
			//回滚事务
			try {
				con.rollback();
				con.close();
			} catch (SQLException e1) {
			}
			throw new RuntimeException(e);
		}
	}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值