私は自分が何を求めているのかをグーグルで見つけることができません-私は他の多くの人からインポートされた大規模なデータベースを持っており、その主キーに大きなギャップがあります。
データベースはInnoDBであり、すべての外部キーが適切に設定されています(とにかく...私は願っています)。
主キーを取得して最小化し、すべてのギャップを埋め、FKエントリも更新するスクリプトを知っている人はいますか?
(例:PK 44、77、88は1、2、3になります)
ありがとう!
ジョナス・T「新しいauto_increment列を挿入し、それを主キーとして設定します。新しい外部キー列を子テーブルに挿入し、古いキー値で新しい主キーを更新します。」
外部キー定義では、ON DELETE、ON UPDATE があります。ON UPDATE を CASCADE ("ON UPDATE CASCADE") に設定すると、主キーの UPDATE が外部キーの UPDATE に「カスケード」されます。
私のキーはすべて UNSIGNED int(11) です。あなたのものを使用する必要があります。各テーブルで実行するためにテーブル名のみを変更する必要があるように、x を使用しました。
CV は作業テーブル、Organization は「最小化」しているテーブルです
DROP TABLE cv;
CREATE TABLE cv (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
cv int(11) UNSIGNED NOT NULL,
PRIMARY KEY(id)
);
INSERT INTO cv (cv)
SELECT id FROM Organisation ORDER BY id;
UPDATE Organisation x
LEFT JOIN cv ON cv.cv = x.id
SET x.id = cv.id;