4

開発および実稼働環境の MySQL データベースに問題があります。2 つのデータベースをマージしたいのですが、コンテンツ作成者が本番環境にレコードを追加しているため、同じ主キーを持つレコードが 20 ほど重複しています。

データ同期に Navicat を使用していますが、本番サーバーのレコードを開発サーバーのレコードで更新するだけです。主キーは何の意味もありません。私がやりたいことは、それらのレコードに新しい主キーを与えることです。

これは Navicat で可能ですか? そうでない場合、手動でデータベースにアクセスして主キーを変更するのは悪い考えでしょうか? それとも、これは MySQL の自動インクリメント機能に影響しますか?

ありがとう。

4

1 に答える 1

4

Navicat の機能についてはお答えできませんが、MySQL では auto_increment 値を簡単に設定できます。ライブ データの場合は、すべてをトランザクションで行うことをお勧めします。

START TRANSACTION;
SELECT max(id)+1 INTO @new_id FROM mytable;
SET @range_start = [first ID you'd like to change];
SET @range_end = [last ID you'd like to change];
SET @offset = @new_id - @range_start;
UPDATE mytable SET id = id + @offset WHERE id BETWEEN @range_start AND @range_end;
SELECT @range_end + @offset + 1;
ALTER TABLE mytable AUTO_INCREMENT=[value returned by above statement];
COMMIT;

注 -ALTER TABLEステートメントには、変数を使用する代わりに定数が必要です。

于 2011-08-22T18:16:27.067 に答える