数据库事务

1.数据库基本事务写法

try (Connection conn = getConnection()) {
   //设置不自动提交
   conn.setAutoCommit(false);
   Statement st = conn.createStatement();
   String sql = "";
   st.execute(sql);
   conn.commit(); //手动提交
} catch (Exception e) {
   	conn.roolback();         //将事务回滚
    LOG.error("execute sql error ");
    throw e;
}

2.数据库连接connection对象的创建默认是设置自动提交事务的;意味着它执行每个语句后自动提交更改,即setAutoCommit(true),如果想同时执行多条语句需要将自动提交关闭setAutoCommit(false),当想要提交SQL语句的更改是调用commit()方法.

3.mysql 数据库事务只针对DML(UPDATE、INSERT、DELETE;增删改),查作为事务无意义;
DDL(CREATE、ALTER、DROP;表操作)无法包装成事务, 默认会提交commit;需要注意提交的脚本时,应当将DDL和DML语句以及DCL(权限等操作)语句严格分开,避免事务被隐性“破坏”,导致误操作情况发生。

比如你打开一个事务正在修改数据,恰好研发同事找你在这个库上新建一个表,剪完你发现自己数据改错了,此时再想回滚就悲剧啦!

又比如研发给你一个事务脚本,中间夹渣一个DDL语句,导致事务“中途”提交一次,等最后发现异常要回滚却发现只能回滚一部分。

总结:
当执行到DDL语句时,会隐式的将当前回话的事务进行一次“COMMIT”操作,因此在MySQL中执行DDL语句时,应该严格地将DDL和DML完全分开,不能混合在一起执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值