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

Mysql-一意のインデックスを使用して結合された列の重複エントリを防止します

    あなたの質問: "一意のインデックスを使用したmysqlクエリでこれを実現できますか? "

    答えは100%はいです。

    インデックスを作成するには、次の2つの方法があります。

    1. CREATE UNIQUE INDEX index_name
    ON table_name (column1, column2, ...);
    
    2. ALTER TABLE table_name 
    ADD UNIQUE index_name (column1, column2, ...);
    

    ただし、これは、テーブルに既存の重複データがない場合にのみ機能します。そうしないと、次のようなエラーメッセージが表示されます。

    Query: CREATE UNIQUE INDEX index_name ON targets (a, b)
    
    Error Code: 1062
    Duplicate entry 'photo-url1' for key 'index_name'
    

    したがって、次のことを行う必要があります。

    1. targetsに似た新しい空のテーブルを作成します テーブル。
    2. 一意のインデックスを作成します。
    3. INSERT IGNORE 古いテーブルのデータ。
    4. targetsの名前を変更します targets_oldへ およびtargets_new targetsへ 。

    例:

    CREATE TABLE targets_new LIKE targets;
    
    CREATE UNIQUE INDEX index_name
    ON targets_new (a, b);
    
    INSERT IGNORE INTO targets_new SELECT * FROM targets;
    
    RENAME TABLE targets TO targets_old;
    RENAME TABLE targets_new TO targets;
    


    1. PostgreSQL:デフォルトの制約名

    2. SQLServerの@@SERVICENAMEとは何ですか?

    3. JSTLsqlタグの使用方法

    4. 外部ホスト/IPからmysqlデータベースにアクセスしますか? (例:mysqlワークベンチ)