今天写个事务,然后故意写错了测试一下,然后就是发现个问题,update cardinfo set cardsta=‘1’ where cardno=‘000000’。
这条语句没问题 问题是cardinfo表里并没有000000这张卡,但是语句跑通了,还可以commit。有没有人知道这是怎么回事,什么原理,不是应该提示查不到此卡吗?
------解决方案--------------------
如果没有这条语句的话就是0 Rows updated,不会报错的,这跟语法没什么关系的,DELETE 也是同样的原理
------解决方案--------------------
where条件是确定影响的行数。
如果影响行数为0算错的话,那开发就没法做了。。也没必要。。
而且不能执行是不合理的,oracle只有真正跑的过程才知道语句影响了哪些行。。
------解决方案--------------------
对,没有满足条件的行的话,影响的行数就是0,否则就按照where条件影响记录。
只要sql语法正确,执行么问题。。
------解决方案--------------------
这个没问题。update 后返回的update个数为0 ,没有更新到数据,你当然可以commit,如果这个一个事物,前面有insert、update之类的commit就不丢失数据了。
如果不commit 之前的就不能commit,当然这是业务规则正确的情况下。