2012-04-05 12 views
3

私はこのようになりますMySQLのテーブルがあります。MySQLでIGNORE修飾子として複数のフィールドを使用してINSERT IGNOREを実行できますか?

`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

IGNOREキーワードを使用すると、INSERT文の実行中に発生するエラーは、代わりに警告として扱われます。たとえば、IGNOREを使用しない場合、テーブル内の既存のUNIQUEインデックスまたはPRIMARY KEY値を複製する行によって重複キーエラーが発生し、そのステートメントは中止されます。 IGNOREでは、行はまだ挿入されませんが、エラーは発行されません。

したがって、複数列の主キーがある場合は動作します。

3

たぶん、このような何か:

ALTER TABLE table ADD UNIQUE (company_id, term_type,term); 
関連する問題