Mysql事务操作失败如何解决

如果要实现事务的原子性,则就需要commit和rollback命令配合上程序上的一个业务逻辑才能可以,具体业务逻辑代码如下示例代码:1.现象 程序中打开了事务进行插入,但是没有commit,表中的数据已经存在,就是回滚也不能删除插入的数据2.原因 本表的Storage Engine 为myisam,不是innoDB,不支持事务处理 rollba...
Mysql事务操作失败如何解决
Mysql事务操作失败如何解决事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。要实现事务的原子性,单单靠一条commit或是rollback命令还是不行的,因为例如commit命令它只是将一个事务中执行成功的DML语句提交给数据库里。如果要实现事务的原子性,则就需要commit和rollback命令配合上程序上的一个业务逻辑才能可以,具体业务逻辑代码如下示例代码:1.现象 程序中打开了事务进行插入,但是没有commit,表中的数据已经存在,就是回滚也不能删除插入的数据2.原因 本表的Storage Engine 为myisam,不是innoDB,不支持事务处理 rollback()3.解决方法 使用 alter table xxxx engine = innoDB ; 将表改为 InnoDB 引擎,结果回滚正常。4.代码 private void testCrud() { Connection conn = null; //连接对象 PreparedStatement pstmt = null; //预编译的SQL语句对象 try{ //加载MySQL驱动程序 Class.forName("com.mysql.jdbc.Driver"); //连接字符串 String url = "jdbc:mysql://localhost:3306/test"; //建立数据库连接 conn = DriverManager.getConnection(url,"root",""); //设置事务的隔离级别 // conn.setTransactionIsolation(Connection. TRANSACTION_REPEATABLE_READ); //设置自动提交为false,开始事务 conn.setAutoCommit(false); //带参数的更新语句 String sql = "INSERT INTO user_info (username ,password ,age )values(?,?,?)"; //准备语句 pstmt = conn.prepareStatement(sql); //绑定参数,执行更新语句,将张三的账户金额减去1000元 pstmt.setString(1, "zhangui"); pstmt.setString(2, "1111"); pstmt.setInt(3, 300); pstmt.execute(); //绑定参数,执行更新语句,将李四的账户金额增加1000元 // pstmt.setString(1, "zzzzzzzzzzzzzzzzz"); //绑定了非法参数 //pstmt.setString(2, "1111111111"); //pstmt.setInt(3, 500); //pstmt.execute(); //将抛出SQL异常 //提交事务 //conn.commit(); System.out.println("事务已提交,转账成功!"); //关闭语句、连接 pstmt.close(); conn.close(); }catch(Exception e){ try{ conn.rollback(); //回滚事务 System.out.println("事务回滚成功,没有任何记录被更新!"); }catch(Exception re){ System.out.println("回滚事务失败!"); } e.printStackTrace(); }finally{ if(pstmt!=null) try{pstmt.close();}catch(Exception ignore){} if(conn!=null) try{conn.close();}catch(Exception ignore){} } }感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 您可能感兴趣的文章:Mysql事务处理详解通过实例分析MySQL中的四种事务隔离级别解决Mysql收缩事务日志和日志文件过大无法收缩问题mysql的存储过程、游标 、事务实例详解PHP mysqli事务操作常用方法分析MySQL四种事务隔离级别详解NodeJs使用Mysql模块实现事务处理实例MySQL数据库事务隔离级别详解MySQL事务的基础学习以及心得分享 2023-07-27
mengvlog 阅读 7 次 更新于 2025-07-21 01:19:08 我来答关注问题0
  • Mysql事务操作失败如何解决事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。要实现事务的原子性,单单靠一条commit或是rollback命令还是不行的,因为例如commit命令它只是将一个事务中执行成功的DML语句提交给数据库里。如果要实现事务的原子性,则就需要commit和rol...

  • 当XA事务发生异常时,可以使用XA RECOVER命令来恢复事务。这个命令会返回一个事务ID列表,这些事务ID表示已经在进行但尚未提交的XA事务。可以通过以下命令来执行XA RECOVER操作:xa recover;执行该命令后,会返回所有尚未完成的XA事务ID。4.手动提交和回滚 当XA事务发生异常时,可以手动提交或回滚事务。这种...

  •  文暄生活科普 MySQL事务锁等待超时 Lock wait timeout exceeded;

    对于解决方法,我们可以通过innodb_lock_wait_timeout参数设置来调整锁等待的时间限制。此外,InnoDB会自动检测并处理事务死锁,通过回滚小规模的事务来打破死锁。当innodb_table_locks参数设置为1且autocommit设置为0时,InnoDB会检测表级别的死锁。对于其他类型的死锁或锁冲突,我们可以通过调整innodb_lock_wait...

  •  云易网络科技 MySQL中Kill命令执行失败解决方法mysql中kill失败

    如果尝试终止MySQL进程仍然失败,我们可以尝试重启MySQL服务。可以使用以下命令来重启MySQL服务:sudo systemctl restart mysql 执行此命令将关闭所有当前运行的MySQL进程,并重新启动MySQL服务。在MySQL启动后,我们可以再次使用show processlist命令来查看运行中的MySQL进程,并尝试使用Kill命令来终止需要终止的进程。

  • 可能的解决方法 1. 检查数据库连接 你可以检查数据库连接是否正确。例如,你可以尝试重新启动MySQL服务器或者重启你的应用程序。你还可以检查你的网络连接,确保连接是可用的。2. 检查数据表和列名 确认一下表名和列名是否正确拼写,如果拼写有误,进行纠正即可。你还可以使用SHOW TABLES或DESCRIBE table...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部