sql >> データベース >  >> RDS >> Mysql

MySQL重複挿入での自動インクリメントを防止します

    INSERTを次のように変更できます:

    INSERT INTO tablename (tag)
    SELECT $tag
    FROM tablename
    WHERE NOT EXISTS(
        SELECT tag
        FROM tablename
        WHERE tag = $tag
    )
    LIMIT 1
    

    $tagの場所 まだ存在しない場合に追加するタグ(適切に引用されているか、もちろんプレースホルダーとして)です。タグがすでに存在する場合、このアプローチではINSERT(およびその後の自動インクリメントの浪費)はトリガーされません。おそらくそれよりも優れたSQLを思い付くことができますが、上記でうまくいくはずです。

    テーブルに適切なインデックスが付けられている場合、存在チェック用の追加のSELECTは高速になり、データベースはとにかくそのチェックを実行する必要があります。

    ただし、このアプローチは最初のタグでは機能しません。常に使用されると思われるタグをタグテーブルにシードするか、空のテーブルを個別にチェックすることができます。



    1. SQLで月末日を取得する

    2. 新機能の紹介-SpotlightCloudReplication

    3. PostgreSQLデータベースのアーキテクチャとメモリの調整

    4. 新しいMicrosoftSQLServerODBCおよびOLEDBドライバーのもつれを解く