MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLの列をAUTO_INCREMENTに変更する方法

既存のテーブルに対して、特定の列にAUTO_INCREMENT(自動採番)を後から追加したいケースはよくあります。そのような場合は、ALTER TABLE文とMODIFY句を組み合わせることで簡単に実現できます。

デモ用テーブルの作成

まず、動作確認のためのサンプルテーブルを作成しましょう。ここでは「Id」と「Name」という2つの列を持つテーブルを定義します。

mysql> create table AddingAutoIncrement
   -> (
   -> Id int,
   -> Name varchar(200),
   -> Primary key(Id)
   -> );
Query OK, 0 rows affected (0.47 sec)

テーブルが作成できました。次に、このテーブルの「Id」列に対してAUTO_INCREMENT属性を追加していきます。

AUTO_INCREMENTを追加する構文

既存の列にAUTO_INCREMENTを設定する際の基本構文は以下の通りです。

ALTER TABLE テーブル名 MODIFY 列名 int AUTO_INCREMENT;

注意点: AUTO_INCREMENTを設定する列は、必ずキー(PRIMARY KEYなど)として定義されている必要があります。今回の例では「Id」列がすでに主キーになっているため、そのまま適用できます。

実際にALTER TABLEを実行する

それでは、上記の構文を使って「AddingAutoIncrement」テーブルの「Id」列にAUTO_INCREMENTを追加してみましょう。

mysql> ALTER table AddingAutoIncrement modify Id int AUTO_INCREMENT;
Query OK, 0 rows affected (1.19 sec)
Records: 0  Duplicates: 0  Warnings: 0

これで「Id」列へのAUTO_INCREMENT設定が完了しました。

DESCコマンドで設定を確認する

正しく反映されているかどうかは、DESCコマンドでテーブル構造を確認することで検証できます。

mysql> desc AddingAutoIncrement;

実行結果は以下のようになります。

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| Id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| Name  | varchar(200) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

出力結果の「Extra」列にauto_incrementというキーワードが表示されていれば、設定が正常に完了しています。

レコードを挿入して動作を検証する

続いて、実際にレコードを挿入し、「Id」の値が自動的に1ずつ増加するかどうかを確認します。INSERT文では「Name」列だけを指定している点に注目してください。「Id」列の値は指定しなくても自動的に採番されます。

mysql> insert into AddingAutoIncrement(Name) values('John');
Query OK, 1 row affected (0.20 sec)

mysql> insert into AddingAutoIncrement(Name) values('Smith');
Query OK, 1 row affected (0.12 sec)

mysql> insert into AddingAutoIncrement(Name) values('Bob');
Query OK, 1 row affected (0.10 sec)

挿入した全レコードをSELECT文で表示してみます。

mysql> select * from AddingAutoIncrement;

実行結果は以下の通りです。

+----+-------+
| Id | Name  |
+----+-------+
|  1 | John  |
|  2 | Smith |
|  3 | Bob   |
+----+-------+
3 rows in set (0.00 sec)

このように、「Id」列に明示的に値を指定しなくても、レコードが挿入されるたびに自動的に1ずつ増加していることが確認できます。これでAUTO_INCREMENTが正しく機能していることがわかります。

  1. JavaでResultSetから列名を取得する方法!MySQLを使ったgetMetaData()の実装例を解説

    ResultSetから列名を取得するには?getMetaData()メソッドの基本JavaでJDBCを使ってデータベース操作を行っていると、「検索結果(ResultSet)に含まれる列名(カラム名)を動的に知りたい」という場面によく出会います。そんなときに活躍するのが、getMetaData()メソッドです。このメソッドを呼び出すと、結果セットの構造情報(列の数や名前、型など)を持つResultSetMetaDataオブジェクトを取得できます。プロトタイプ宣言は以下のとおりです。ResultSetMetaData getMetaData() throws SQLException;サンプル用テ

  2. 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