回答:
列を追加した後は、いつでも主キーを追加できます。
ALTER TABLE goods ADD PRIMARY KEY(id)
スクリプトが機能しなかった理由についてPRIMARY KEYは、単語だけでなくを指定する必要がありますPRIMARY。
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRST後AUTO_INCREMENTに置きidます。つまり、は既存のテーブルの最初の列になります。さもなければ、それは現在書かれているように表の最後に置かれます、それは単純なことをするときに少し混乱するSELECT * ...
既存の列に主キー制約を追加する場合、上記の構文はすべて失敗します。
主キー制約を既存の列に追加するには、次の形式を使用します。
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
テーブルが非常に大きい場合は、次のステートメントを使用しないでください。
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
一時テーブルのすべてのデータのコピーを作成し、テーブルを変更してからコピーします。手動で実行することをお勧めします。テーブルの名前を変更します。
rename table goods to goods_old;
主キーと必要なすべてのインデックスを持つ新しいテーブルを作成します。
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
すべてのデータを古いテーブルから新しいテーブルに移動し、キーとインデックスを無効にしてコピーを高速化します。
-これをMyISAMテーブルに使用:
SET UNIQUE_CHECKS=0;
ALTER TABLE goods DISABLE KEYS;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;
-これをInnoDBテーブルに使用します。
SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1;
最大200行のテーブルにPKを追加するには、2000秒かかります。
これが他の人にとって重要かどうかはわかりませんが、データベースの最初の列よりもidテーブルの方を好みます。そのための構文は次のとおりです。
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
これは、最初の回答よりもわずかに改善されています。別の位置にしたい場合は、
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
HTH、-ft
これを試して、
alter table goods add column `id` int(10) unsigned primary key auto_increment
適切に機能するように引用符を削除...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;