4

我有一个如下所示的 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在每次插入之前检查这个组合。当我将数亿行数据处理到这个表中时。

4

2 回答 2

5

也许是这样的:

ALTER TABLE table ADD UNIQUE (company_id, term_type,term);
于 2012-04-05T19:58:23.390 回答
4

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

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

于 2012-04-05T19:57:44.883 回答