MySQLのALTER TABLEでAUTO_INCREMENTを追加する方法を徹底解説
MySQLで既存テーブルのカラムにAUTO_INCREMENT(自動採番)を追加したい場合は、ALTER TABLEコマンドを使用します。この記事では、基本的な構文から実際の動作確認まで、具体例を交えてわかりやすく解説します。
AUTO_INCREMENTを追加する基本構文
既存のカラムにAUTO_INCREMENTを設定するには、以下の構文を使用します。
ALTER TABLE テーブル名 CHANGE カラム名 カラム名 データ型 AUTO_INCREMENT PRIMARY KEY;
ポイントは、AUTO_INCREMENTを設定するカラムがキー(PRIMARY KEYなど)である必要がある点です。そのため、上記のようにPRIMARY KEYを同時に指定するのが一般的です。
サンプルテーブルの作成
まず、動作を確認するためにカラムを1つだけ持つシンプルなテーブルを作成しましょう。
mysql> create table AlterTableToAddAutoIncrement -> ( -> StudentId int -> ); Query OK, 0 rows affected (0.57 sec)
このテーブルの「StudentId」カラムは、現時点では単なるint型のカラムです。
ALTER文でAUTO_INCREMENTを設定する
次に、基本構文に従って「StudentId」カラムにAUTO_INCREMENTとPRIMARY KEYを設定します。実行するクエリは以下の通りです。
mysql> alter table AlterTableToAddAutoIncrement change StudentId StudentId int AUTO_INCREMENT Primary key; Query OK, 0 rows affected (1.93 sec) Records: 0 Duplicates: 0 Warnings: 0
これで「StudentId」カラムにAUTO_INCREMENTが追加されました。CHANGE句では「既存カラム名 新カラム名 データ型」の順で指定するため、カラム名を変更せずに属性だけ変えたい場合は、同じカラム名を2回記述します。
動作確認:値を指定せずにレコードを挿入
AUTO_INCREMENTが正しく機能しているか確認するために、値を一切指定せずにレコードを挿入してみましょう。
mysql> insert into AlterTableToAddAutoIncrement values(); Query OK, 1 row affected (0.16 sec) mysql> insert into AlterTableToAddAutoIncrement values(); Query OK, 1 row affected (0.16 sec) mysql> insert into AlterTableToAddAutoIncrement values(); Query OK, 1 row affected (0.33 sec)
値を指定しなくてもエラーにならずに挿入できていれば、AUTO_INCREMENTが有効になっています。
挿入結果の確認
すべてのレコードを表示してみます。
mysql> select * from AlterTableToAddAutoIncrement;
出力結果は以下の通りです。
+-----------+ | StudentId | +-----------+ | 1 | | 2 | | 3 | +-----------+ 3 rows in set (0.00 sec)
このように、値を指定しなくても1、2、3と自動的に連番が採番されていることが確認できます。
補足:MODIFY句を使う方法と開始値の変更
カラム名をそのままに属性だけ変更する場合は、CHANGEの代わりにMODIFY句を使うこともできます。
ALTER TABLE テーブル名 MODIFY カラム名 データ型 AUTO_INCREMENT PRIMARY KEY;
また、連番の開始値を変更したい場合は、以下のようにAUTO_INCREMENTの値を指定します。
ALTER TABLE テーブル名 AUTO_INCREMENT = 100;
これにより、次に挿入されるレコードから100番以降の連番が採番されるようになります。
まとめ
MySQLで既存テーブルのカラムにAUTO_INCREMENTを追加するには、ALTER TABLE ... CHANGE(またはMODIFY)コマンドを使い、AUTO_INCREMENTとPRIMARY KEYを同時に指定します。追加後は、値を指定せずにINSERTを実行して連番が正しく採番されるか確認しておくと安心です。
-
MySQLで日付型カラムにNULLを挿入する方法|ALTER TABLEによるカラム定義の変更手順
日付型(DATE)カラムにNULLを挿入したい場合、ALTER TABLE文とMODIFY句を使って、カラム定義をNULL許可に変更する必要があります。基本の構文alter table テーブル名 modify column カラム名 date NULL;既存のテーブル構造はそのままに、指定したカラムだけをNULLを許容する形へ変更できます。検証用テーブルを作成するまず、日付カラムをNOT NULLとして定義したテーブルを作成します。mysql> create table DemoTable ( ShippingDate date NOT NULL ); Query OK, 0
-
MySQLのALTER TABLEで一意制約(UNIQUE)を追加する方法
MySQLでは、ALTER TABLE文を使うことで、すでに作成済みのテーブルに対して後から一意制約(UNIQUE制約)を追加できます。一意制約を設定すると、指定したカラム(または複数カラムの組み合わせ)に重複した値を挿入できなくなり、データの整合性を保つことができます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstName(名)」と「LastName(姓)」の2つのカラムを持つテーブルを用意します。mysql> create table DemoTable1811 ( FirstName varchar(20), Las