MySQL AUTO_INCREMENTカラムの変更方法
MySQL
オートインクリメント
変更
プライマリ
プライマリーキー
キー変更
ドロッププライマリー
increment
primary key
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
AUTO_INCREMENT
たとえば、こんなテーブルがあったとします。このテーブルってidがプライマリーキーです。
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `seq_id` int(10) unsigned NOT NULL , `name` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ;
以下のように、seq_idをPRIMARY KEYに変更したい場合、どのような手順を踏めば良いでしょうか?すこし力技になります
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL , `seq_id` int(10) unsigned NOT NULL NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`seq_id`) ) ;
筋トレが最強のソリューションである マッチョ社長が教える究極の悩み解決法
- 作者: Testosterone(テストステロン)
- 出版社/メーカー: U-CAN
- 発売日: 2016/01/29
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (9件) を見る
超筋トレが最強のソリューションである 筋肉が人生を変える超科学的な理由
- 作者: Testosterone,久保孝史,福島モンタ
- 出版社/メーカー: 文響社
- 発売日: 2018/04/27
- メディア: Kindle版
- この商品を含むブログを見る
流れ的にこういうふうにやるとは思うのですが
まずは、PRIMARY KEY のDROP
- オートインクリメントが設定されているからエラーになります
ALTER TABLE users DROP PRIMARY KEY ; >ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
なので、すこし面倒な手順を踏みます
- オートインクリメントのカラム属性を変更
ALTER TABLE users CHANGE COLUMN `id` `id` int(10) unsigned NOT NULL ;
- 次に既存のプライマリーキーをドロップする
ALTER TABLE users DROP PRIMARY KEY ;
- 新しいカラムにプライマリーキーを設定する
ALTER TABLE users ADD PRIMARY KEY (seq_id) ;
- 新しいカラムの属性を、AUTO_INCREMENTにする
ALTER TABLE users CHANGE COLUMN `seq_id` `seq_id` int(10) unsigned NOT NULL NULL AUTO_INCREMENT;
ここまでやって、やっと変更ができるようになる!かなり面倒・・
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL, `seq_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`seq_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;