MySQL 事务处理

MySQL  事务处理

 

 MySQL  事务

  • 在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务
  • 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
  • 事务用来管理insert,update,delete语句

关于事务的术语:

  • 事务(transaction):指一组SQL语句
  • 回滚(rollback):指撤销指定SQL语句的过程
  • 提交(commit):指将未存储的SQL语句结果写入到数据库中
  • 保留点(savepoint):指事务处理中设置的临时占位符,可以对它进行回滚。

事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回滚,何时应该提交。

回滚事务

start transaction;/*开始事务*/
delete from t_tableA where id=1;
rollback;/*事务回滚*/



提交事务

start transaction;
delete from t_tableA where id=1;
commit;/*提交事务*/



保留点

start transaction;
delete from t_tableA where id=4;
savepoint s1;/*声明一个保留点*/
delete from t_tableA where id=5;
rollback to s1;/*回滚到s1保留点*/



事务的四个特征(ACID属性)

  1. 原子性(Atomic):组成事务的处理语句组成了一个逻辑单元,这是最小的逻辑单元。
  2. 一致性(Consistent):在事务处理之前和之后,数据是一致的。
  3. 隔离性(Isolated):一个事务的处理对另一个事务的处理没有影响。
  4. 持续性(Durable):当事务处理成功后,其结果在数据库中被永久记录下来。


JDBC中使用事务

Class.forName("com.mysql.jdbc.Driver");        
Connection conn = DriverManager.getConnection("jdbc:mysql:///db", "root", "root");

conn.setAutoCommit(false);//取消自动提交

PreparedStatement stat = null;
try {
    String sql = "INSERT INTO t_user(`name`) VALUES('xyz1')";
    String sql2 = "INSERT INTO t_user(`name`) VALUES('xyz2')";
    
    stat = conn.prepareStatement(sql);
    stat.executeUpdate();
    
    Savepoint sp1 = conn.setSavepoint();
    
    stat = conn.prepareStatement(sql2);
    stat.executeUpdate();
    
    conn.rollback(sp1);//回滚到保留点,即跳过了sql2语句
    conn.commit();
} catch (Exception e) {
    e.printStackTrace();
    conn.rollback();//出现异常,SQL不执行
} finally {
    stat.close();
    conn.close();
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值