【SQLite3】カラムにAUTOINCREMENT 制約を付与する

サーバ・DBなどのイメージズを作成している

レコードを一意に決める際、今までは手動で値を決めてINSERTしてきました。

例えば、PRIMARY KEY の記事では、10番代からスタートしてキーに対して意味を持たせていました。

しかし、もしIDの数値自体に意味を持たせる必要がない場合。

例えば社員が100人いて、先頭から順番にIDがよい。という場合はいちいち自分で値を指定する必要はないですよね。

SQLite3に限らず、他のデータベースシステムにおいても、AUTOINCREMENTを付与することにより、値を自動採番しデータを一意に決めるキーを作成することが可能です。

記事要約
  1. AUTOINCREMENTについて解説します。
  2. ATUOINCREMENTの基本構文を掲載します。
  3. サンプルコードを用いて、社員リストを作成します。

目次

AUTOINCREMENTとは何か?

データベース内のレコードを一意に特定する際に、利用できる属性です。

手動で値を決めるのではなく、自動で値を採番してくれます。

値は一ずつ増加して、連番にしてくれます。

基本構文とサンプル

【employeeテーブルの作成】

とある会社で雇用している社員名の一覧(employeeテーブル)を作成します。

employeeテーブル
  1. IDは社員番号とする。
  2. IDは上から順番に連番にする。
  3. 社員名は【社員_X】という形式で追加していく。

株価のデータとは離れてしまいますが、ご容赦ください!

【基本構文(AUTOINCREMENT)】

create table テーブル名称 (カラム名1 integer primary key autoincrement, カラム2 データ型);

【補足:PRIMARY KEYのデータ型】

今回基本構文で掲載したものは、以下の2点から成り立っています。

カラムに付与した属性
  1. カラム1に対してPRIMARY KEY を付与する。
  2. カラム1はINTEGER型である。

こうすることで、IDは数値の連番となり、またPRIMARY KEYとしてレコードを一意に決める属性が付与されます。

サンプル(employeeテーブル作成)

create table employee(id integer primary key autoincrement, name text);

データの投入

insert into employee(name) values('社員_1');
insert into employee(name) values('社員_2');
insert into employee(name) values('社員_3');
insert into employee(name) values('社員_4');
insert into employee(name) values('社員_5');
禄太
このSQLで注目していただきたいのが、INSERTする際にIDを指定していないことです!これで、社員名だけをINSERT文でSQKを実行しても、IDに連番が付与されるかを見てみましょう。

動作確認

IDを指定していなくても、1〜5の番号が付与されていることがわかります。

※select文以下をご覧ください。

IDの一部を欠番にした場合

INSERT文を実行するときに既存の番号からいくつか飛ばして、欠番を作ったとします。

欠番を指定した場合は、欠番を飛ばして最大値からまた連番がスタートします。

例えば、現状5番までの社員番号を飛ばして、10から指定することも可能です。

その場合、次に番号を指定せずに実行すると、11からスタートします。

動作補足(欠番を挿入)

禄太
まずは、社員番号を飛ばして、ID10番の【社員_6】さんのレコードを作成します!

動作補足(欠番の次にIDを指定せずに社員を追加)

禄太
IDを指定せずに、【社員_7】さんのレコードを作成します!
AUTOINCREMENTの効果で、現状付与されいている最大の値に+1された値が連番として作成されます。
 ※つまり、今回で言うと、11番が作成されます。

EOF

AUTOINCREMENTについて、ご説明しました。

禄太
本日も一緒に学習してくださって、ありがとうございました!

では、また次回。