ホームページ >データベース >mysql チュートリアル >一意のキーの競合が発生した場合、MySQL はエラーなしで行を挿入できますか?
重複のない行の挿入: 「INSERT ... ON DUPLICATE KEY (何もしない)」について
質問:
MySQL は、一意のキーが存在する場合にエラーを生成せずに挿入操作を実行できますか?競合が発生しますか?
具体的には、主キーがまだ存在しない場合にのみ、INSERT ステートメントを使用してテーブルに行を挿入する方法はありますか?
回答:
MySQL は、INSERT 中に重複キーの競合を処理する 2 つの方法を提供します操作:
1. INSERT ... ON DUPLICATE KEY UPDATE
この構文では、挿入操作によって重複キー違反が発生する場合に実行される追加アクションを指定できます。たとえば、既存の行を新しい行の値で更新できます。
ただし、ON DUPLICATE KEY UPDATE 句には特定の "DO NOTHING" オプションはありません。
2. INSERT ... ON DUPLICATE KEY UPDATE>
別の方法として、この構文を使用して重複キーの競合を基本的に無視することもできます。この場合、id 列はそれ自体に割り当てられ、更新はトリガーされません。
3. INSERT IGNORE
厳密なエラー処理が必要なく、自動インクリメント フィールドや外部キー制約に関する潜在的な問題を心配しない場合は、INSERT IGNORE ステートメントを使用できます。この構文は、重複キーが見つかった場合に挿入操作をスキップします。
例:
質問に記載されている user_permanent_gift テーブルを考えてみましょう。キーが重複している場合にエラーを生成せずにこのテーブルに行を挿入するには、次のステートメントを使用できます。
INSERT IGNORE INTO user_permanent_gift (fb_user_id, gift_id, purchase_timestamp) VALUES (123, 456, '2022-03-15 12:00:00');
このステートメントは行の挿入を試みますが、fb_user_id と Gift_id の組み合わせがすでにテーブルに存在する場合、エラーは生成されずに挿入はスキップされます。
以上が一意のキーの競合が発生した場合、MySQL はエラーなしで行を挿入できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。