AUTO_INCREMENTを設定する(連続した数値を自動でカラムに格納する)
カラムに AUTO_INCREMENT をつけると、データを追加した時にカラムに対して現在格納されている最大の数値に 1 を追加した数値を自動で格納することができます。カラムに連続した数値を自動で格納したい場合に便利です。ここでは MariaDB における AUTO_INCREMENT の使い方について解説します。
(Last modified: )
目次
AUTO_INCREMENTの使い方
整数型が設定されているカラムに対しては AUTO_INCREMENT を設定することができます。書式は次の通りです。
CREATE TABLE tbl_name (col_name data_type AUTO_INCREMENT,...)
カラムのデータ型のあとに AUTO_INCREMENT を記述します。 AUTO_INCREMENT を設定する場合は次の制約があります。
・AUTO_INCREMENT はテーブルごとに 1 つのカラムにしか設定できません。
・AUTO_INCREMENT が設定されたカラムにはインデックスが設定されている必要があります。
インデックスを設定する必要があるので、実際には次のような書式になります。インデックスを自動的に作成する PRIMARY KEY や UNIQUE を設定しても構いません。
CREATE TABLE tbl_name (col_name data_type AUTO_INCREMENT,..., INDEX (col_name))
テーブルにデータを追加したとき、AUTO_INCREMENT が設定されたカラムに値を指定しなかったり 0 や NULL を指定したりした場合、自動的に現在カラムに格納されている最大の値に 1 を加算した値を自動で格納します。
では実際に試してみます。次のように実行してください。
create table user (id int auto_increment, name varchar(10), index(id));
新しいテーブルを作成しました。テーブルには id カラムと name カラムがあり、 id カラムに AUTO_INCREMENT が設定されています。
作成したテーブルのカラム情報を確認します。
show columns from user;
Extra カラムの値をみていただくと、 AUTO_INCREMENT が設定された id カラムには auto_increment と表示されています。
それではテーブルにデータを追加してみます。
insert into user(name) values('Suzuki');
id カラムには値を指定せずにデータを追加しました。
追加したデータをテーブルから取得してみます。
select * from user;
追加されたデータの id カラムには自動的に 1 が格納されました。 AUTO_INCREMENT が設定されたカラムに値が指定されなかったので、現在カラムに格納されている最大の値に 1 を加算した値を格納するのですが、最初のデータの場合は 1 が格納されます。
それではもう一つデータを追加します。追加したあとでデータをテーブルから取得してください。
insert into user(name) values('Yamada');
新しく追加されたデータの id カラムには自動的に 2 が格納されました。今回も AUTO_INCREMENT が設定されたカラムに値が指定されなかったので、現在カラムに格納されている最大の値に 1 を加算した 2 が格納されました。
このようにカラムに AUTO_INCREMENT を設定すると、自動的に連続した数値が格納されていきます。
テーブルからデータが削除された場合に次に自動で格納される値
AUTO_INCREMENT が設定されたカラムでは、データが追加されたときに値が指定されないと現在カラムに格納されている最大の値に 1 を加算した値が格納されます。例えば現在テーブルに次のようなデータが格納されている状況で、データを新しく追加すると AUTO_INCREMENT が設定されている id カラムには 3 が格納されます。
これは id カラムに格納されている最大の値が 2 のためですが、この id カラムの値が 2 のデータを削除した場合はどうなるでしょうか。
delete from user where id='2';
ここで新しいデータを追加してみます。
insert into user(name) values('Tanaka');
追加されたデータの id カラムの値は 3 となりました。これはデータを追加した時点で次にデータを追加したときに AUTO_INCREMENT が設定されているカラムに格納される値が決まっているためです。つまり id カラムの値が 2 となるデータを追加した時点で、次にデータを追加されたら id カラムは 3 を格納すると決まっていたため、 id カラムの値が 2 のデータが削除されていても新しく追加したデータの id カラムの値は 3 となりました。
なお次にデータが追加されたときに AUTO_INCREMENT が設定されているカラムに格納される値を確認するには次のように実行してください。
select AUTO_INCREMENT from information_schema.tables where table_schema='mydb' and table_name='user';
次にデータが追加されると AUTO_INCREMENT が設定されたカラムには 4 が格納されます。
AUTO_INCREMENTが設定されたカラムに指定した値を格納する
AUTO_INCREMENT が設定されているカラムは 値を指定しなかったり NULL または 0 を格納することで自動で値が格納されますが、任意の値を指定して格納することもできます。
例えば id カラムに AUTO_INCREMENT テーブルで、データが次のように格納されている状態で試してみます。
次にデータを追加するときに id カラムに値を指定しないと、 id カラムに格納される値は 3 です。
select AUTO_INCREMENT from information_schema.tables where table_schema='mydb' and table_name='user';
ではこの状態から id カラムに明示的に値を指定してデータを追加してみます。
insert into user(id, name) values(10, 'Honda');
テーブルからデータを取得して確認します。
select * from user;
格納されたデータを確認すると、 id カラムの値にはデータを追加するときに指定した 10 が格納されているのが確認できます。このように AUTO_INCREMENT が設定されたカラムであっても任意の値を指定してデータを追加することができます。
次にAUTO_INCREMENTが設定されたカラムに追加される値
今回追加したデータの id カラムの値(10)に 1 を加えた値(11)は、データを追加する前に次に AUTO_INCREMENT が設定されたカラムに設定されるはずだった値(3)よりも大きいので、次にデータを追加したときにカラムに追加される値は 11 になります。
select AUTO_INCREMENT from information_schema.tables where table_schema='mydb' and table_name='user';
なお AUTO_INCREMENT が設定されたカラムに指定する値は、これまでカラムに格納されている最大の値である必要はありません。例えば次のように中間の値を指定してデータを追加してみます。
insert into user(id, name) values(6, 'Kuroki');
問題なく指定した値でデータが追加されました。このとき今回追加したデータの id カラムの値(6)に 1 を加えた値(7)は、データを追加する前に次に AUTO_INCREMENT が設定されたカラムに設定されるはずだった値(11)よりも小さいので、次にデータを追加したときにカラムに追加される値は 11 のままです。
テーブル作成時にAUTO_INCREMENTで自動で格納される値の初期値を設定する
AUTO_INCREMENT が設定されたカラムに設定される初期値は 1 から開始されますが任意の値から開始することもできます。初期値を設定する場合の書式は次の通りです。
CREATE TABLE tbl_name (col_name data_type AUTO_INCREMENT,..., INDEX (col_name)) AUTO_INCREMENT = value
AUTO_INCREMENT が設定されたカラム( col_name )に最初に自動で格納される初期値( value )を設定してテーブルを作成します。
では実際に試してみます。次のようなテーブルを作成します。 id カラムに AUTO_INCREMENT を設定しています。初期値は 20 としました。
create table user (id int auto_increment, name varchar(10), index(id)) auto_increment=20;
新しいデータを追加します。そのあとでテーブルからデータを取得します。
insert into user(name) values('Tanaka');
AUTO_INCREMENT が設定されたカラムに値を指定せずにデータを追加しましたが、自動で追加された値が 1 ではなく 20 から始まっていることが確認できました。
-- --
MariaDB における AUTO_INCREMENT の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。