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)
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);
列の名前を変更しない場合は、MODIFY
を使用できます。
ALTER TABLE `companies` MODIFY `id` int(11),
DROP PRIMARY KEY,
ADD PRIMARY KEY (`uuid`);
これを1つの変更ステートメントですべて実行することで、アトミックとしても扱われるため、(複数のステートメントを続けて実行する場合とは異なり)クエリ間で不整合が生じる可能性はありません。
自動インクリメントを削除するクエリは次のとおりです。
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)