以下の内容はhttps://hit.hateblo.jp/entry/MySQL/AUTO_INCREMENTより取得しました。


MySQL 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`)
)
;

流れ的にこういうふうにやるとは思うのですが

まずは、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 ;

f:id:hit10231023:20180309104332j:plain




以上の内容はhttps://hit.hateblo.jp/entry/MySQL/AUTO_INCREMENTより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14