Database JUNKY

MySQL,MariaDBを中心としたブログです

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