Mysql事务操作失败如何解决
作者:sinkingboat 时间:2024-01-27 15:17:50
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){}
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.chinaunix.net/uid-122937-id-143223.html
标签:Mysql,事务
0
投稿
猜你喜欢
详解Pandas与openpyxl库的超强结合
2021-09-05 03:52:15
Python中Tkinter组件Menu的具体使用
2023-09-11 12:46:26
Oracle 11.2.0.4打补丁的方法
2024-01-13 08:01:26
经典SQL语句大全
2009-08-26 16:44:00
删除目录下相同文件的python代码(逐级优化)
2023-08-02 17:25:10
python实现决策树
2021-11-07 19:14:05
ThinkPHP框架实现用户信息查询更新及删除功能示例
2024-06-07 15:34:11
Python 列表的基本操作介绍
2021-09-09 08:13:34
JS代码的格式化和压缩
2007-10-17 21:17:00
Python基本语法经典教程
2021-08-25 18:16:51
go语言开发环境安装及第一个go程序(推荐)
2024-05-05 09:34:22
python实现带界面的井字棋小游戏
2022-11-14 22:28:24
基于python实现图片转字符画代码实例
2023-05-17 01:53:37
python采集博客中上传的QQ截图文件
2021-03-03 16:45:25
基于GORM实现CreateOrUpdate方法详解
2024-02-14 09:18:02
ASP实例:读取xml文件的程序
2007-11-04 18:47:00
如何使用Python实现自动化水军评论
2022-08-25 21:15:48
Php多进程实现代码
2023-10-11 09:23:14
Web设计中的黄金分割[译]
2009-02-20 13:41:00
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2023-05-21 01:32:42