我想做以下事情:
INSERT INTO table1 (term1, term2, number) values ('A','B',10);
但是,如果值A和B已经存在于table1
中,无论的顺序如何,即:谓语(term1='A' && term2='B') OR (`term1='B' && term2='A')
成立,那么我只想更新列号。有什么办法吗?
一个(也许) 干净的方法处理这种情况是使用INSERT ... ON DUPLICATE KEY UPDATE
,阅读文档
如果指定ON DUPLICATE KEY UPDATE,则插入一行是否会在UNIQUE索引或PRIMARY KEY中导致重复的值执行旧行
的UPDATE
重要的是会导致UNIQUE索引中的重复值。因此,您需要创建一个多列唯一索引。
现在我不确定您是否可以以这种方式管理顺序,因此我将创建一个额外的字段,其中包含您的字段的排序值的连接,并使该字段唯一索引。
EDIT:您也可以只存储散列并对其进行索引,而不是存储您的字段。
谢谢@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;