【发布时间】:2015-05-22 09:26:40
【问题描述】:
我有一个更新行的问题。我有一个名为serialNum 和varchar(50) not null unique default null 的专栏
当我从合作伙伴公司获得响应数据时,我会根据唯一的serial_num(我们公司的序列号)更新该行。
有时更新失败是因为:
Duplicate entry 'xxxxxxxx' for key 'serialNum'
但是当我搜索整个表时,要更新的值不存在。它有时会发生,但并非总是如此,例如 300 次中的 10 次。
为什么会发生这种情况,我该如何解决?
下面是我用来更新的查询:
String updateQuery = "update phone set serialNum=?, Order_state=?, Balance=? where Serial_num=" + resultSet.get("jno_cli");
PreparedStatement presta = con.prepareStatement(updateQuery);
presta.setString(1, resultSet.get("oid_goodsorder"));
presta.setString(2, "order success");
presta.setFloat(3, Float.valueOf(resultSet.get("leftmoney")));
presta.executeUpdate();
【问题讨论】:
-
MySQL 默认不区分大小写。这可能是它发现重复项的原因吗?
-
还要注意前导/尾随空格
-
向我们展示您用于更新和搜索的完整查询。
-
您是自己创建查询还是使用 hibernate 之类的库来创建查询?
-
是否有两条“Serial_num”相同的记录?如果有,更新最终会将这两条记录的“serialNum”设置为相同的值,从而打破约束。顺便说一句,有一个名为 Serial_num 的列和另一个名为 serialNum 的列听起来像是一场等待发生的灾难。