223

2 つの列に一意のキーを持つテーブルがあります。

CREATE  TABLE `xpo`.`user_permanent_gift` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`fb_user_id` INT UNSIGNED NOT NULL ,
`gift_id` INT UNSIGNED NOT NULL ,
`purchase_timestamp` TIMESTAMP NULL DEFAULT now() ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `user_gift_UNIQUE` (`fb_user_id` ASC, `gift_id` ASC) );

そのテーブルに行を挿入したいのですが、キーが存在する場合は何もしません。キーが存在するためにエラーが生成されるのは望ましくありません。

次の構文があることを知っています。

INSERT ... ON DUPLICATE KEY UPDATE ...

しかし、次のようなものがあります:

INSERT ... ON DUPLICATE KEY DO NOTHING 

?

4

3 に答える 3

387

はい、使用します(それ自体に割り当てられてINSERT ... ON DUPLICATE KEY UPDATE id=idいても、行の更新はトリガーされません)。id

エラー (変換エラー、外部キー エラー) と自動インクリメント フィールドの枯渇 (重複キーのために行が挿入されなくてもインクリメントされます) を気にしない場合は、次のINSERT IGNOREように使用します。

INSERT IGNORE INTO <table_name> (...) VALUES (...)
于 2011-01-04T17:15:05.620 に答える
1

Use ON DUPLICATE KEY UPDATE ...,
Negative :UPDATEが 2 番目のアクションにリソースを使用するため。

Use INSERT IGNORE ...,
Negative : 何か問題が発生した場合、MySQL はエラーを表示しないため、エラーを処理できません。クエリを気にしない場合にのみ使用してください。

于 2018-05-28T07:49:01.630 に答える