MySQLで主キーとAUTO_INCREMENTを削除する方法【ALTER TABLEの実例付き】
MySQLでは、ALTERコマンドを使うことで、テーブルから主キー(PRIMARY KEY)とAUTO_INCREMENT属性をまとめて削除できます。基本の構文は以下の通りです。
ALTER TABLE テーブル名 DROP PRIMARY KEY, CHANGE カラム名 カラム名 データ型;
それでは、実際にテーブルを作成しながら手順を確認していきましょう。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成します。以下のクエリを実行してください。
mysql> create table removePrimaryKey
-> (
-> StudentId int NOT NULL AUTO_INCREMENT,
-> StudentFirstName varchar(20),
-> StudentLastName varchar(20),
-> PRIMARY KEY(StudentId)
-> );
Query OK, 0 rows affected (0.47 sec)
このテーブルでは、StudentIdカラムが主キーかつAUTO_INCREMENTに設定されています。
DESCコマンドでテーブル構造を確認する
テーブルの構造を確認するには、DESCコマンドを使用します。構文は次のとおりです。
desc テーブル名;
実際に「removePrimaryKey」テーブルの構造を確認してみましょう。
mysql> desc removePrimaryKey;
出力結果は以下のようになります。
+------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentFirstName | varchar(20) | YES | | NULL | |
| StudentLastName | varchar(20) | YES | | NULL | |
+------------------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
上記の出力に注目してください。「Key」列に「PRI」、「Extra」列に「auto_increment」が表示されています。この2つを、冒頭で紹介したALTER DROPコマンドを使って削除していきます。
主キーとAUTO_INCREMENTを削除する
実際に実行するクエリは以下の通りです。
mysql> alter table removePrimaryKey DROP PRIMARY KEY,change StudentId StudentId int;
Query OK, 0 rows affected (1.79 sec)
Records − 0 Duplicates − 0 Warnings − 0
これで、主キーとAUTO_INCREMENTが正常に削除されました。
削除結果の確認
最後に、DESCコマンドで再度テーブル構造を確認し、主キーとAUTO_INCREMENTが本当に削除されたかチェックしましょう。
mysql> desc removePrimaryKey;
出力結果は以下の通りです。
+------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+-------+
| StudentId | int(11) | YES | | NULL | |
| StudentFirstName | varchar(20) | YES | | NULL | |
| StudentLastName | varchar(20) | YES | | NULL | |
+------------------+-------------+------+-----+---------+-------+
3 rows in set (0.07 sec)
「Key」列と「Extra」列が空になり、StudentIdが通常のint型カラムへ戻っていることが確認できました。
注意点
主キーを削除する際は、以下の点に留意してください。
- 主キーを削除してもNOT NULL制約は自動的には外れない場合があります。必要に応じてCHANGE句やMODIFY句で明示的に調整しましょう。
- InnoDBの場合、主キーの削除はテーブル全体の再構築を伴うことがあり、大量データのテーブルでは時間がかかる可能性があります。
- 本番環境で操作を行う前には、必ずデータのバックアップを取得することをおすすめします。
-
MySQLのAUTO_INCREMENTとは?自動採番と初期値の設定方法をわかりやすく解説
AUTO_INCREMENT属性の基本MySQLのAUTO_INCREMENT属性は、新しい行に対して一意の識別子(連番)を自動的に生成するために使用されます。カラムが「NOT NULL」として宣言されている場合、そのカラムにNULLを代入することで、連番のシーケンスを生成することが可能です。AUTO_INCREMENTカラムに任意の値を挿入すると、そのカラムは指定した値に設定され、同時にシーケンスもリセットされます。以降は、挿入された最大値を起点として、連続した値が自動的に生成されていきます。また、既存のAUTO_INCREMENTカラムを更新した場合も、AUTO_INCREMENTのシーケ
-
MySQLのAUTO_INCREMENTの使い方と実例解説
ここでは、MySQLにおける AUTO_INCREMENT の仕組みについて詳しく解説します。AUTO_INCREMENTとはAUTO_INCREMENT 属性は、新しい行に対して一意の識別子を自動的に生成するために使用されます。実際にどのように動作するのか、以下のクエリで確認してみましょう。サンプルクエリCREATE TABLE tableName ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO tableName (name