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

2つのテーブルの自動インクリメントギャップを修正するMySQL

    ALTER TABLE table2
    ADD FOREIGN KEY FK_IMAGE (id_image)
    REFERENCES table1 (id_image)
    ON DELETE CASCADE
    ON UPDATE CASCADE;
    
    SET @currentRow = 0;
    
    UPDATE table1 INNER JOIN (
        SELECT @currentRow := @currentRow + 1 AS id_image_new, id_image AS id_image_old
        FROM table1
        ORDER BY id_image ASC) t on t.id_image_old = table1.id_image
    SET table1.id_image = t.id_image_new;
    
    ALTER TABLE table1 AUTO_INCREMENT = 1;
    

    FKはそれに応じて2番目のテーブルのIDを自動的に更新します。

    まったくわかりませんが、一部の古いバージョンのmysqlでは、更新のサブクエリ内で参照しているテーブルを更新するとクラッシュする可能性があります。その場合は、2番目のテーブルを作成して埋め(挿入)してから、古いテーブルを削除して新しいテーブルの名前を変更します。



    1. MacにSQLServer2019をインストールする

    2. Oracleストアドプロシージャを実行する方法は?

    3. PostgreSQLのSOxコンプライアンスチェックリスト

    4. pgadmin4:postgresqlアプリケーションサーバーに接続できませんでした。