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 阅读 35 次 更新于 2025-09-10 15:18:15 我来答关注问题0
  • Mysql事务操作失败如何解决事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。要实现事务的原子性,单单靠一条commit或是rollback命令还是不行的,因为例如commit命令它只是将一个事务中执行成功的DML语句提交给数据库里。如果要实现事务的原子性,则就需要commit和rol...

  •  文暄生活科普 Lock wait timeout exceeded……

    可以参考分布式事务的解决方案,如使用 Seata 等分布式事务管理器。高并发场景下的库存扣减:在高并发场景下,如果采用原生 MySQL 事务操作来做批量库存更新,会导致大量请求处于锁等待状态。可以考虑将库存数据放到 Redis 中,把数据库操作转化为 Redis 操作。但需要注意,Redis 事务并不具备完整性(不支持...

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

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

  •  阿暄生活 mysql innodb-trx 表有事务一直未提交bug

    处理阻塞事务:如果事务即将完成,可以选择等待事务自然提交或回滚。如果确定事务是由于程序异常或业务逻辑错误导致长时间未提交,可以使用KILL [thread_id];命令终止对应的事务线程。MySQL会自动回滚该线程对应的事务,并释放其所持有的锁。优化业务逻辑:在编写代码时,应确保使用try-catch-finally结构来管理...

  •  翡希信息咨询 Spring事务失效的 8 大原因,这次可以吊打面试官了!

    原因:某些数据库引擎(如MySQL的MyISAM)不支持事务操作,而InnoDB引擎才支持事务。解决方案:确保使用的数据库引擎支持事务,通常选择InnoDB引擎。Transactional注解使用在非public方法上 原因:@Transactional注解只能用于public的方法上,如果用在protected、private或包可见性(default)的方法上,事务将不会生效...

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

mySQL相关话题

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