連続番号機能を使う

主キーや一意キーでは、重複する値を入れることを防ぐことができました。

このような重複のない値というのは、商品の番号のように数値を使うことがあります。

数値の際に、いちいち自分で入力するのでなく、1,2,3,..と自動で番号をつけていければ楽でいいですね。

そこで、今回はこのように連続番号を自動でいれる方法を紹介します。

 

連続番号を自動でつけるには

CREATE TABLE テーブル名(カラム名 データ型 AUTO_INCREMENT PRIMARY KEY,…);

CREATE TABLE テーブル名(カラム名 データ型 AUTO_INCREMENT UNIQUE,…);

のようにAUTO_INCREMENTをデータ型につけます。

自動で連続番号を付ける際には、

  1. データ型が整数型である
  2. 一意である(主キー、一意キー)

という条件が必要です。

 

では、データベースmy_dbにテーブルmy_tb_autoを追加してみましょう。

  1. カラムnoをINT型、主キー、連続番号
  2. カラムnameをVARCHAR(10)

とします。

mysql> CREATE TABLE my_tb_auto(no INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10));

とすれば、テーブルが追加されます。実際に確認すると

mysql> DESC my_tb_auto;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| no    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

となります。Extraにauto_incrementとなっていることがわかります。

 

では、データを入れていきましょう。

mysql> INSERT INTO my_tb_auto(name) VALUES('山田太郎');

とすれば

mysql> SELECT * FROM my_tb_auto;
+----+--------------+
| no | name         |
+----+--------------+
|  1 | 山田太郎     |
+----+--------------+

とデータが入ります。確かに番号が自動についていますね。さらに一つ

mysql> INSERT INTO my_tb_auto(name) VALUES('佐藤花子');

入れれば

mysql> SELECT * FROM my_tb_auto;
+----+--------------+
| no | name         |
+----+--------------+
|  1 | 山田太郎     |
|  2 | 佐藤花子     |
+----+--------------+

となります。

連続番号の初期値の設定

 データを消したり付け加えたりした際、連続番号はどうなるでしょうか。

このことを調べるため、

mysql> DELETE FROM my_tb_auto;

と一度データを消します。そして

mysql> INSERT INTO my_tb_auto(name) VALUES('近藤武蔵');

によりデータを付け加えると

mysql> SELECT * FROM my_tb_auto;
+----+--------------+
| no | name         |
+----+--------------+
|  3 | 近藤武蔵     |
+----+--------------+

となります。

 

これを1からにするためには

ALTER TABLE テーブル名 AUTO_INCREMENT=X;

という命令を使います。ここでXには開始連続番号をいれます。例えば、

mysql> DELETE FROM my_tb_auto;
mysql> ALTER TABLE my_tb_auto AUTO_INCREMENT=1;
mysql> INSERT INTO my_tb_auto(name) VALUES('近藤武蔵');

とすれば、

mysql> SELECT * FROM my_tb_auto;
+----+--------------+
| no | name         |
+----+--------------+
|  1 | 近藤武蔵     |
+----+--------------+

となります。さらにここから10から始めたければ

mysql> ALTER TABLE my_tb_auto AUTO_INCREMENT=10;
mysql> INSERT INTO my_tb_auto(name) VALUES('本田茂');

とします。すると

mysql> SELECT * FROM my_tb_auto;
+----+--------------+
| no | name         |
+----+--------------+
|  1 | 近藤武蔵     |
| 10 | 本田茂       |
+----+--------------+

となります。

今の番号よりも小さい番号を設定することはできません。例えば、いまの場合、4のような10以下の値を設定できません。

著者:安井 真人(やすい まさと)