事务SQL语句执行失败,但是没有回滚
Topic source抱歉,是我表述出错。
您文中有写到:
‘数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败。如果事务失败,那么效果就和没有执行这些SQL一样,不会对数据库数据有任何改动。’
我在一个事务中写了两条update语句,第一条update语句执行后,第二条update语句执行报错。但是,第一条update语句执行后的结果仍然被写进了数据库。
事务失败是程序检测到错误主动调用rollback
你忽略了错误继续调用commit那成功执行的sql就保存了
java里会失败是因为错误的sql会抛出异常,异常导致:
try {
execute("insert ...");
execute("insert ...");
commit();
} catch (Exception e) {
rollback();
}
https://www.runoob.com/mysql/mysql-transaction.html
这里有demo,大致可以意会到,
程序中会因为失败自动调用 rollback
而在sql中,需要认为手动 rollback 才行,操作者自己选择回滚,而不是看到错误,还继续commit,期待数据库系统给我们rollback
- 1
九月-柚
廖老师,您好!
关于COMMIT,我故意将一条语句中的字段名写错,可还是没有回滚。
下面是我的测试代码,麻烦您帮我看一下: