MySQLでAUTO_INCREMENTの設定を忘れたときは?後からALTER TABLEで追加する方法
結論:後からでもAUTO_INCREMENTは設定可能です
テーブル作成時にAUTO_INCREMENT(自動採番)の設定を忘れてしまっても心配いりません。ALTER TABLE文を使用すれば、あとからいつでもカラムへAUTO_INCREMENTを追加できます。
本記事では、実際のサンプルコードを使いながら、設定を忘れたテーブルへ後からAUTO_INCREMENTを追加する手順を段階的に解説します。
手順1:AUTO_INCREMENTなしでテーブルを作成する
まず、AUTO_INCREMENTを設定せずにテーブルを作成します。ここでは、学生IDと学生名を持つシンプルなテーブルを例にします。
mysql> create table forgetToSetAutoIncrementDemo
-> (
-> StudentId int,
-> StudentName varchar(30)
-> );
Query OK, 0 rows affected (1.17 sec)
手順2:テーブル構造を確認する
DESC文でテーブルの構造を確認しましょう。Extra欄にauto_incrementが表示されておらず、まだ自動採番が設定されていないことがわかります。
mysql> desc forgetToSetAutoIncrementDemo;
+-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | StudentId | int(11) | YES | | NULL | | | StudentName | varchar(30) | YES | | NULL | | +-------------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
手順3:ALTER TABLEでAUTO_INCREMENTを追加する
次に、ALTER TABLE ... MODIFY COLUMN文を使って、StudentIdカラムにAUTO_INCREMENTを設定します。このとき、NOT NULL制約とPRIMARY KEYも同時に指定するのがポイントです。
mysql> alter table forgetToSetAutoIncrementDemo modify column StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY; Query OK, 0 rows affected (2.12 sec) Records: 0 Duplicates: 0 Warnings: 0
手順4:変更結果を確認する
もう一度DESC文を実行してテーブル構造を見てみると、Extra欄にauto_incrementが表示され、Null欄がNO、Key欄がPRIになっていることが確認できます。これで自動採番の追加に成功しました。
mysql> desc forgetToSetAutoIncrementDemo;
+-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | StudentId | int(11) | NO | PRI | NULL | auto_increment | | StudentName | varchar(30) | YES | | NULL | | +-------------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)
手順5:レコードを挿入して動作を検証する
INSERT文でデータを登録してみましょう。StudentIdを指定せず、StudentNameだけを挿入します。
mysql> insert into forgetToSetAutoIncrementDemo(StudentName) values('Larry');
Query OK, 1 row affected (0.16 sec)
mysql> insert into forgetToSetAutoIncrementDemo(StudentName) values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into forgetToSetAutoIncrementDemo(StudentName) values('Robert');
Query OK, 1 row affected (0.17 sec)
手順6:SELECT文で結果を確認する
SELECT文ですべてのレコードを表示すると、StudentIdに自動的に連番が振られていることがわかります。
mysql> select * from forgetToSetAutoIncrementDemo;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 2 | Chris | | 3 | Robert | +-----------+-------------+ 3 rows in set (0.00 sec)
AUTO_INCREMENTを後から設定する際の注意点
- インデックスが必須:AUTO_INCREMENTを設定するカラムには、必ずインデックス(PRIMARY KEYまたはUNIQUEキー)が必要です。上記の例ではPRIMARY KEYを同時に指定しています。
- 既存データとの整合性:すでにデータが入っているテーブルの場合、NULLや重複した値が存在するとエラーになることがあります。事前にデータのクリーニングを行いましょう。
- 既存レコードへの連番付与:既存の行にも自動的に連番が割り当てられますが、どの行にどの番号が付くかの順序は保証されないため注意が必要です。
まとめ
CREATE TABLE実行時にAUTO_INCREMENTの設定を忘れても、ALTER TABLE ... MODIFY COLUMN文を使えば簡単に後から追加できます。「int NOT NULL AUTO_INCREMENT PRIMARY KEY」のように、NOT NULL・AUTO_INCREMENT・PRIMARY KEYをまとめて指定するのが基本の書き方です。テーブル設計時のミスに気づいたら、慌てずにこの方法を試してみてください。
-
MySQLのZEROFILLとAUTO_INCREMENTを使ってカスタム自動採番を実現する方法
MySQLでは、ZEROFILLとAUTO_INCREMENTを組み合わせることで、桁数が固定された連番(自動インクリメント)を作成できます。例えば、ユーザーIDを「0000101」のように7桁で表示したい場合に便利です。ここでは、実際にテーブルを作成して動作を確認してみましょう。まず、UserIdカラムにZEROFILLとAUTO_INCREMENTを設定したテーブルを作成します。mysql> create table DemoTable1831 ( UserId int(7) zerofill auto_increment, PRIMARY KEY(UserI
-
MySQLのAUTO_INCREMENTとは?自動採番と初期値の設定方法をわかりやすく解説
AUTO_INCREMENT属性の基本MySQLのAUTO_INCREMENT属性は、新しい行に対して一意の識別子(連番)を自動的に生成するために使用されます。カラムが「NOT NULL」として宣言されている場合、そのカラムにNULLを代入することで、連番のシーケンスを生成することが可能です。AUTO_INCREMENTカラムに任意の値を挿入すると、そのカラムは指定した値に設定され、同時にシーケンスもリセットされます。以降は、挿入された最大値を起点として、連続した値が自動的に生成されていきます。また、既存のAUTO_INCREMENTカラムを更新した場合も、AUTO_INCREMENTのシーケ