AUTO_INCREMENTの設定

広告

整数のデータ型が設定されているカラムに対してはAUTO_INCREMENTを設定することができます。書式は次の通りです。

CREATE TABLE db_name.tbl_name
  (col_name1 data_type1 AUTO_INCREMENT, col_name2 data_type2, ..., 
   INDEX(col_name1));

AUTO_INCREMENTが設定されたカラムには自動的に連番の値が格納されていきます。初期値は1でデータを追加する時に、対象のカラムの値がNULLまたは0だった場合には、1つ前にデータを追加した後に対象のカラムに格納されている最大の値に1を加えた値が格納されます。

基本的にAUTO_INCREMENTが設定されたカラムには自動で値が格納されていくように利用するのですが、任意の数値を指定して格納することも可能です。また重複した値を格納することもできます。

AUTO_INCREMENTをテーブル内で設定する場合は次の点に注意して下さい。

AUTO_INCREMENTを設定するカラムには同時にインデックスを設定する必要がある
AUTO_INCREMENTはテーブル内の1つのカラムにしか設定できない
AUTO_INCREMENTを設定したカラムにはDEFAULTは設定できない
AUTO_INCREMENTには正の値しか格納できない(負の数も可能だが予期しない結果となる)

では実際に試してみます。次のようなテーブルを作成します。

mysql> create table autotest(id int auto_increment, name varchar(10),
    -> index(id));

p7-1

作成したテーブルのカラム情報を取得してみます。

p7-2

またテーブルの詳細情報を取得してみます。

p7-3

表示された情報の中に「Auto_increment: 1」という記述があります。AUTO_INCREMENTが設定されたカラムに次にNULLまたは0が格納された時に代わりに代入される値がここで表示されている1になります。

ではデータを追加してみます。

mysql> insert into autotest(name) values('扇風機');

p7-4

今回AUTO_INCREMENTが設定されたカラムには値を指定せずにデータを追加しましたので、自動で値が設定されます。初期値は1から開始されるため対象のカラムには1が格納されます。

さらにデータを追加してみます。

p7-5

追加で2つのデータを追加しました。今回もAUTO_INCREMENTが設定されたカラムには値を指定せずにデータを追加しましたので、自動で値が設定されます。最初以外の場合は、1つ前にデータが追加された時に対象のカラムに格納されている値の最大値に1を加えた値となるため、順に2、3と格納されています。

では再度テーブルの詳細情報を取得してみます。

p7-6

「Auto_increment: 4」と表示されます。現時点でAUTO_INCREMENTが設定されたカラムの中に格納されている最大値は3ですので、次に自動で値が設定される時は4に設定されています。

対象のカラムの値を削除した場合

では「id」カラムの値が3のデータを削除してみます。

p7-7

この時点でAUTO_INCREMENTが設定されたカラムの中に格納されている最大値は2となりました。テーブルの詳細情報を確認します。

p7-8

「Auto_increment: 4」は変わっていません。このようにデータを削除しても次回設定される値に変更はありません。ではデータを実際に追加してみます。

p7-9

追加されたデータの対象のカラムには4が格納されていることが確認できます。

任意の値を設定

AUTO_INCREMENTが設定されているカラムに対しても値を自分で指定して設定することができます。

ではデータを追加してみます。

mysql> insert into autotest(id, name) values(15, 'DVDプレイヤー');

p7-10

データ追加時に指定した値がそのまま格納されています。ではテーブルの詳細を確認します。

p7-11

カラムの値を指定してデータを追加した場合、指定した値に1を加えた値と、元々次回設定する値として保存されていた値を比較し、より大きい値を改めて次回設定する値として保存します。

設定される値がどのように決定されるのかをまとめると次のようになります。

操作格納される値次回格納される値
指定なしで追加12
指定なしで追加23
指定なしで追加34
値3のデータを削除--4
指定なしで追加45
値10を指定してデータを追加1011
値10のデータを削除--11
値8を指定してデータを追加811
指定なしで追加1112

初期値の設定

AUTO_INCREMENTが設定されたカラムに設定される初期値は1から開始されますが任意の値を設定することもできます。書式は次の通りです。

CREATE TABLE db_name.tbl_name
  (col_name1 data_type1 AUTO_INCREMENT, col_name2 data_type2, ..., 
   INDEX(col_name1))
   AUTO_INCREMENT = value;

「AUTO_INCREMENT = 初期値」を指定してテーブルを作成して下さい。

では実際に試してみます。次のようなテーブルを作成します。

mysql> create table autotest(id int auto_increment, name varchar(10),
    -> index(id)
    -> auto_increment = 100);

p7-12

ではテーブルの詳細を確認します。

p7-13

「Auto_increment: 100」となっていることが確認できます。では実際にデータを追加してみます。

p7-14

今回AUTO_INCREMENTが設定されているカラムに値を指定していませんので、初期値として指定していた100が格納されました。

( Written by Tatsuo Ikura )