mysql事务的简单理解

首先说几个概念问题

事务:

1、事务的原子性
一组事务,要么成功;要么撤回。

2、稳定性
有非法数据(外键约束之类),事务撤回。

3、隔离性
事务独立运行。
一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
事务的100%隔离,需要牺牲速度。

4、可靠性
软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。

回滚:

回滚到事务刚刚开始的时候

保存点:

也就是保存运行后的内容,不至于所有事务都回到开始的地方

mysql表


代码示例

public class Jdbcshiwu {
private static String jdbcDriver = "com.mysql.jdbc.Driver";// mysql连接驱动,无需改
private static String jdbcUrl = "jdbc:mysql://localhost:3306/zdy";
private static String jdbcuser = "root"; // 数据库用户名
private static String jdbcpwd = "root"; // 数据库密码
private static Connection conn;
public static PreparedStatement ps;


public static void main(String[] args) {
try {
Class.forName(jdbcDriver);
conn = DriverManager.getConnection(jdbcUrl, jdbcuser, jdbcpwd); // 驱动利用驱动地址,数据库用户名,密码创建连接
conn.setAutoCommit(false);// 设置不自动提交
ps = conn.prepareStatement("UPDATE caiwu set money=money-10 where id=1;");
ps.executeUpdate();

ps = conn.prepareStatement("UPDATE caiwu set money=money+10 where id=2;");
ps.executeUpdate();
conn.commit();// 如果上面的执行都没问题,再提交。
} catch (Exception e) {
try {
conn.rollback(); //回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


}
}

运行代码后的mysql表




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值