我想做以下事情:
INSERT INTO table1 (term1, term2, number) values ('A','B',10);
但是,如果值{A}和B已经存在于table1
中,无论其订单是否,即。谓词
(term1='A' && term2='B') OR (`term1='B' && term2='A')
成立,那我只想更新列号。有没有办法做到这一点?
答案 0 :(得分:2)
处理这种情况的A(可能 ) 干净方式 是使用INSERT ... ON DUPLICATE KEY UPDATE
,read 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;