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 に答える