INSERT ...使用条件进行DUPLICATE KEY UPDATE

时间:2018-06-11 02:48:57

标签: mysql

我的表有Cas字段,我想在保存操作中实现CompareAndSet

这是我的sql代码

INSERT INTO `test_cas_table`(id,name,cas) VALUES(3, "test data", 2) 
  ON DUPLICATE KEY UPDATE 
    id = VALUES(id),
    name = VALUES(name),
    cas = IF(cas = VALUES(cas) - 1, VALUES(cas) , "update failure")

因为cas字段是BIGINT,当cas != VALUES(cas) - 1将其设置为"更新失败"导致此执行失败

但是这种方式太难看了,有一个很好的实现吗?

我想知道postgresql有很好的实现吗?

我希望一次执行它

1 个答案:

答案 0 :(得分:0)

您的身份列是否已自动生成?如果是这样,则无需检查重复项。只需插入新信息,您的数据库就会处理它。

但是,如果您有一个非自动生成的标识列(如电子邮件或官方文档而不是自动增量整数主键),您需要首先查询您的数据库,查找您即将发布的值坚持。这样,您可以检查查询结果并告诉用户更改其电子邮件或官方文档(如果已由其他用户使用),而不是接收SQLException(Java)。