3

(entry_id, user_id, event_id)entry_idが自動インクリメントに設定されたテーブル があります。entry_idしかし、私は主キーとして作るのを忘れていました。今、私は同じで約400のエントリを持っていますentry_id。増加していません。テーブルを削除せずにentry_idが一意になるように変更するにはどうすればよいですか?

次のクエリを実行すると、何かが失われますか?

ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);

entry_idすべての私の値は1であることに注意してください。

4

7 に答える 7

5

自動インクリメント値を使用して新しいテーブルを作成してINSERT SELECTから、既存のテーブル (キー値が正しくない列を除く) を新しいテーブルに追加してください。これにより、キーが自動的に入力されます。最後に、古いテーブルを削除し、新しいテーブルの名前を変更します。

于 2012-10-16T07:25:28.433 に答える
2

まず、各行をループするスクリプトを実行し、entry_idを自動インクリメント方式で設定する必要があると思います。クエリを実行します

ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);
于 2012-10-16T07:27:30.423 に答える
2

行番号を使用して、主キー列を設定できます。

update your_table set entry_id=@curRow;
于 2012-10-16T07:27:32.597 に答える
2
  1. entry_idすべての値を NULL にリセットします
  2. フィールドをentry_idPRIMARY+AUTO_INCREMENT にすると、MySQL がすべてを行います。

ここにスクリプトがあります -

UPDATE your_table SET entry_id = NULL;

ALTER TABLE your_table
  CHANGE COLUMN entry_id entry_id INT(11) NOT NULL AUTO_INCREMENT,
  ADD PRIMARY KEY (entry_id);
于 2012-10-16T08:11:46.160 に答える
1

クエリは実行されないため、何も失われません。

mysql> alter table test add primary key (entry_id);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

列に番号を付け直すかentry_id、テーブル全体を新しい(正しい)テーブルにコピーしentry_idAUTO_INCREMENTください。

于 2012-10-16T07:27:41.717 に答える
1

常にテーブルのバックアップを取り、このクエリで作業してください。テーブルには影響しません。また、auto increment as 1レコードを追加すると、.so にerror as duplicateifが返される場合、auto_increment の entity_id の値から始めて、そのような重複した値の挿入を避けるのは簡単です。1 is existstablemaximum

間違っている場合は訂正してください

于 2012-10-16T07:30:50.787 に答える
1

または、次の 2 つの手順でこれを行うこともできます。

次の SQL を実行して、ID をインクリメントします。

begin
declare entry_id_upd, numberOfRecords, cursor int;
set numberOfRecords = (select count(*) from mytable);
set cursor = 0;
while cursor <= numberOfRecords do
set entry_id_upd = ( select entry_id from mytable where id = cursor ) + 1;
update mytable set entry_id = entry_id_upd where id = cursor;
set cursor = ( cursor + 1 );
end while;
end

次に、主キーを設定します。

ALTER TABLE mytable ADD PRIMARY KEY (entry_id);
于 2012-10-16T07:31:24.843 に答える