web-dev-qa-db-ja.com

mysql、列を変更して主キーとauto_incrementを削除

Mysql dbテーブルをid(auto)からuidに変更しています。

ALTER TABLE companies DROP PRIMARY KEY;
ALTER TABLE companies ADD PRIMARY KEY (`uuid`);

これは私が得るエラーです。

[SQL] ALTER TABLE companies DROP PRIMARY KEY;
[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

私が理解していることですが、主キーとしてドロップしたので、IDを非自動インクリメントに変更する必要があります。列を変更して主キーと自動インクリメントを削除する構文は何ですか?

ALTER TABLE companies change id id ?????????? int(11)
27
Brett

1つのSQLステートメントでid列から自動インクリメントと主キーを削除する必要がある場合は、次のようにします。

ALTER TABLE companies DROP PRIMARY KEY, CHANGE id id int(11);

実際、単一のALTER TABLEクエリですべてを実行できるはずです。

ALTER TABLE companies
DROP PRIMARY KEY,
CHANGE id id int(11),
ADD PRIMARY KEY (uuid);
32
Lauri Lehtinen

列の名前を変更しない場合は、MODIFYを使用できます。

ALTER TABLE `companies` MODIFY `id` int(11), 
                           DROP PRIMARY KEY, 
                   ADD PRIMARY KEY (`uuid`);

これを1つの変更ステートメントですべて実行することで、アトミックとしても扱われるため、(複数のステートメントを続けて実行する場合とは異なり)クエリ間で不整合が生じる可能性はありません。

4
Ray

自動インクリメントを削除するクエリは次のとおりです。

alter table companies DROP PRIMARY KEY,
change id id int(11) NOT NULL

これで、テーブルの構造が自動インクリメントなしであることがわかります。

主キーに別の列を追加する場合は、このクエリを使用します

alter table companies add PRIMARY KEY(uuid)

自動インクリメント、主キーを削除し、同じクエリの新しい列に主キーを追加する場合は、このクエリを使用します

alter table comapnies DROP PRIMARY KEY,
   change id id int(11) NOT NULL,
   add PRIMARY KEY(uuid)
3
John