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

一意のインデックスを持つ重複を削除する

    テーブルに重複があり、使用する場合

    ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
    

    クエリはエラー1062(重複キー)で失敗します。

    ただし、IGNOREを使用する場合

    -- (only works before MySQL 5.7.4)
    ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
    

    重複は削除されます。ただし、ドキュメントには、保持される行が指定されていません:

    ALTERTABLE構文

    バージョンが5.7.4以降の場合、次のことができます。

    • データを一時テーブルにコピーします(技術的には一時テーブルである必要はありません)。
    • 元のテーブルを切り捨てます。
    • 一意のインデックスを作成します。
    • そして、INSERT IGNOREを使用してデータをコピーし直します (まだ利用可能です)。
    CREATE TABLE tmp_data SELECT * FROM mytable;
    TRUNCATE TABLE mytable;
    ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
    INSERT IGNORE INTO mytable SELECT * from tmp_data;
    DROP TABLE tmp_data;
    

    (INSERT構文)

    INSERT...SELECT構文 も参照してください。 およびIGNOREキーワードとの比較厳密なSQLモード



    1. FORCEPLANを使用してT-SQL結合のクエリオプティマイザをオーバーライドする

    2. Oracleのvarcharとvarchar2の違いは何ですか?

    3. ユーザーwww-dataの接続アクセスが拒否されました

    4. テーブルレベルのバックアップ