如果满足两列(无论顺序)的条件,则INSERT或UPDATE

时间:2014-07-03 14:20:36

标签: mysql sql insert-update

我想做以下事情:

INSERT INTO table1 (term1, term2, number) values ('A','B',10); 

但是,如果值{A}和B已经存在于table1 中,无论其订单是否,即。谓词

(term1='A' && term2='B') OR (`term1='B' && term2='A')

成立,那我只想更新列号。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

处理这种情况的A(可能 干净方式 是使用INSERT ... ON DUPLICATE KEY UPDATEread the documentation

  

如果指定ON DUPLICATE KEY UPDATE,则插入一行   会在UNIQUE索引或PRIMARY KEY,MySQL中导致重复值   执行旧行的更新

重要的部分是会导致UNIQUE索引中的重复值。因此,您需要创建多列唯一索引

现在我不确定你是否可以通过这种方式管理订单,因此我会创建一个额外的字段,其中包含字段的排序值的串联,并且该字段具有唯一索引。

编辑:您可以只存储哈希并将其编入索引,而不是存储字段的连接。

答案 1 :(得分:0)

谢谢@okiharaherbst,

这就是我所做的:我添加了新专栏" uniqueKey"作为主键,插入如下:

INSERT INTO table1(term1,term2,num,uniquekey) VALUES ( "a","b",10, 
concat(greatest(term1,term2),least(term1,term2))) on duplicate key update num=10;