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

冗長データのデータベースをクリーンアップする

    重複するレコードが挿入されないように、テーブルの場所に一意のインデックスを追加します

    ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
    

    これにより、重複するレコードがテーブルから自動的に削除されます。今後の挿入クエリでは、INSERT IGNOREを使用する必要があります。 重複エラーを回避するための句。

    しかし、@AD7sixによって提案されたように コメントでは、MySQLバージョン5.1.41,5.5.1-m2, 6.0では機能しない可能性があります :バグこちら を参照してください

    または、DELETEを使用して重複を削除する別の安全な方法 クエリ:

    DELETE a
    FROM location a
         LEFT JOIN (
                    SELECT locid
                    FROM location
                    GROUP BY country, city
                   )b
                   ON a.locid = b.locid
    WHERE b.locid IS NULL;
    

    auto_incrementの値を再設定します 列locidprimary keyをドロップするだけです locidで そしてそれを再作成します:

    ALTER TABLE location DROP column locid;
    ALTER TABLE location 
          ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
    

    またはlocidの値を再設定する別の方法 UPDATEを使用する クエリ:

    SET var_locid = 0;
    
    UPDATE location
    SET locid = (@var_locid := @var_locid + 1)
    ORDER BY locid ASC;
    


    1. 次のシナリオでdb関係(pk / fk)を維持する方法はありますか?

    2. Oracle PL / SQL:UTL_FILE.FCOPYの例

    3. MySQLとMongoDB1000の読み取り

    4. Python FlaskとMySQLを使用してゼロからWebアプリを作成する:パート4