我必须在mysql表中插入一些值,但前提是没有其他(几乎)相等的行,例如:
TABLE T
KEY | COL1 | COL2
1 | abc | 123
2 | def | 456
KEY列使用自动增量,我不会在语句中通知它,如下所示:
INSERT INTO T (COL1, COL2) VALUES (abc, 123)
上述声明与第一行的值相同。如果行像这样重复,我怎么能告诉mysql我不想插入?
我搜索了一些解决方案,发现INSERT IGNORE, ..ON DUPLICATE KEY UPDATE and REPLACE
我必须告知PK,但我不知道(不使用额外的查询)。
答案 0 :(得分:2)
> INSERT INTO memos(id,text)
> SELECT 5, 'text to insert'
> WHERE NOT EXISTS(SELECT 1 FROM memos WHERE id = 5 AND text = 'text to insert');
答案 1 :(得分:1)
ON DUPLICATE KEY
和INSERT IGNORE
将适用于任何唯一索引,而不仅仅是主键。因此,您可以为这些列添加唯一索引:
ALTER TABLE T
ADD UNIQUE INDEX (col1, col2);
将其设为多列索引意味着组合必须是唯一的,即使每个列都可以单独复制。
答案 2 :(得分:0)
if not exists(select * from t where col1 = "abc" and col2 ="123")then
insert into t (col1,col2) values("abc",123 );
end if;