我可以使用多个字段作为MySQL中的IGNORE限定符来执行INSERT IGNORE吗?

时间:2012-04-05 19:53:15

标签: mysql select insert indexing

我有一个MySQL表,如下所示:

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`company_id` int(8) unsigned NOT NULL,
`term_type` varchar(255) NOT NULL DEFAULT '',
`term` varchar(255) NOT NULL DEFAULT '',

我希望能够做到这一点......

INSERT IGNORE INTO table ( company_id, term_type, term )
VALUES( a_company_id, 'a_term_type', 'a_term' )

...但是当我们已经存在相同的company_id,term_type和term组合时,我希望忽略插入。我知道如果我在尝试插入重复值时在单个字段上有唯一索引,则将忽略插入。有没有办法做我正在尝试的组合?我可以使用多列索引吗?

我试图在每次插入之前避免执行SELECT检查此组合。因为我在这个表中处理了数亿行数据。

2 个答案:

答案 0 :(得分:4)

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。

因此,如果你有一个多列主键 - 它可以工作。

答案 1 :(得分:4)

也许是这样的:

ALTER TABLE table ADD UNIQUE (company_id, term_type,term);