2

他の2つのテーブル間の多対多関係の中間テーブルとして機能しているため、主キーとして2つの列を持つ多数の行(約1万行)を持つ既存のテーブルがあります。

id新しい要件については、自動増分値を持つ主キーでなければならない新しい列の追加(たとえば)を割り当てる必要があります。次のクエリを実行しました。

ALTER TABLE  `momento_distribution` ADD  `id` INT( 11 ) NOT NULL FIRST;
ALTER TABLE  `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` );

最初のクエリは正常に実行されましたが、次のエラーで2番目のクエリが生成されました。

1062 - Duplicate entry '0' for key 'PRIMARY'

理由は明らかです。新しい列idはデフォルト値として0になり、主キーは重複する値を持つことができません。

2番目のクエリを実行する前に、1,2,3...のような新しい列の増分値を設定する必要があります。

Oracleでは、これはROWIDを介して実行できます。MySQLにも同等の@rowidがあります。誰かが@rowidを列の列値として設定するクエリを提案できますidか?

注:10000行を手動で変更することはできないため、これはクエリを介して行う必要がありました。

4

2 に答える 2

4

同時にAUTO_INCREMENTに設定する必要があります。これにより、データが入力されます。

ALTER TABLE momento_distribution 
  ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

ここでデモ。

編集:既存の主キーがある場合は、それを同時に削除する必要があります。

ALTER TABLE momento_distribution 
  DROP PRIMARY KEY, 
  ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
于 2012-08-29T16:58:44.653 に答える
2

同じユーザーが異なる方法で尋ねた同じ質問。その質問を参照してください。

MySQL1062-キー「PRIMARY」の重複エントリ「0」

つまり、1。既存のFKを削除します2.既存のPKを削除します3.最初のクエリを次のように実行します

ALTER TABLE  `momento_distribution` ADD  `id` INT( 11 ) PRIMARY KEY AUTO_INCREMENT NOT NULL FIRST;

また、@ rowidに依存せずに一意の番号を割り当てます。4。必要に応じて、前の列にFKを追加します。

于 2012-08-30T04:31:18.163 に答える