MySQLで既存のテーブルにAUTO_INCREMENTを追加する方法を解説
MySQLでは、すでに作成済みのテーブルに後から自動採番カラム(AUTO_INCREMENT)を追加することができます。この操作には ALTER コマンドを使用します。ここでは、具体的な手順をサンプルコードとともに順番に解説していきます。
1. テーブルを作成する
まず、動作確認用のシンプルなテーブルを作成します。
mysql> create table DemoTable
-> (
-> StudentName varchar(100)
-> );
Query OK, 0 rows affected (0.46 sec)
この時点では「StudentName」カラムのみを持つテーブルが作成されています。
2. AUTO_INCREMENTを設定する手順
AUTO_INCREMENTを設定するには、次の3つのステップが必要です。
ステップ1:新しいカラムを追加する
まず、ALTER TABLE文で整数型(int)のカラムを追加します。NOT NULL制約を付けておくのがポイントです。
mysql> alter table DemoTable ADD COLUMN StudentId int NOT NULL;
Query OK, 0 rows affected (0.50 sec)
Records: 0 Duplicates: 0 Warnings: 0
ステップ2:主キー(PRIMARY KEY)を設定する
AUTO_INCREMENTを指定できるのは、インデックスが張られたカラムだけです。通常は主キーとして登録します。
mysql> alter table DemoTable ADD PRIMARY KEY(StudentId);
Query OK, 0 rows affected (1.23 sec)
Records: 0 Duplicates: 0 Warnings: 0
ステップ3:AUTO_INCREMENT属性を付与する
最後に、CHANGE句を使って同じカラム定義に対してAUTO_INCREMENT属性を追加します。
mysql> alter table DemoTable CHANGE StudentId StudentId int NOT NULL AUTO_INCREMENT;
Query OK, 0 rows affected (2.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
これで、「StudentId」カラムはレコードが挿入されるたびに自動的に連番が採番されるようになります。
3. レコードを挿入して動作を確認する
INSERT文でデータを登録してみましょう。StudentNameだけを指定すれば、StudentIdには自動的に連番が割り当てられます。
mysql> insert into DemoTable(StudentName) values('Chris');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(StudentName) values('David');
Query OK, 1 row affected (0.15 sec)SELECT文ですべてのレコードを表示して確認します。
mysql> select * from DemoTable;
実行結果
上記のクエリを実行すると、次のような出力が得られます。
+-------------+-----------+
| StudentName | StudentId |
+-------------+-----------+
| Chris | 1 |
| David | 2 |
+-------------+-----------+
2 rows in set (0.00 sec)
挿入時にStudentIdを指定していないにもかかわらず、1と2という連番が自動的に割り当てられていることがわかります。
まとめ
既存のテーブルにAUTO_INCREMENTを追加する場合は、「カラムの追加 → 主キーの設定 → AUTO_INCREMENT属性の付与」という3段階の手順を踏みます。ALTER TABLE文を使えば、テーブルを作り直すことなく後から自動採番カラムを導入できるので、既存システムの拡張やID管理の改善にぜひ活用してください。
-
MySQLトリガー(TRIGGER)を使ってテーブルに現在の日付を自動挿入する方法
この記事では、MySQLのトリガー(TRIGGER)を使用して、テーブルに現在の日付(DATE)を自動的に挿入する方法を解説します。INSERT文の実行時に日付を指定しなくても、トリガーによって自動的に現在日付が登録される仕組みを見ていきましょう。 サンプルテーブルの作成 まず、以下のクエリでテーブルを作成します。 mysql> create table DemoTable1584-> (-> DueDate datetime-> );Query OK, 0 rows affected (1.79 sec) ここでは、datetime型の「DueDate」カラムを持つテ
-
MySQLのINSERT INTO SELECT構文でAUTO_INCREMENTテーブルにデータを挿入する方法
はじめにMySQLでは、INSERT INTO ... SELECT構文を使うことで、SELECT文の結果をそのまま別のテーブルへ挿入できます。AUTO_INCREMENT列を持つテーブルに対しても、SELECT句で明示的に値を指定すれば、任意のIDを設定した状態で挿入が可能です。本記事では、AUTO_INCREMENT主キーを持つテーブルに、INSERT INTO SELECT文で具体的な値を挿入する手順を、サンプルコードと実行結果とともに解説します。テーブルの作成まず、次のようにテーブルを作成します。mysql> create table DemoTable1923 &nb