【SQLite3】PRIMARY KEYを利用して、レコードを一意に決める

PCで仕事をしている人

UNIQUE以外にも、データを一意に決める方法があります。

それが、PRIMARY KEY(主キー)です。

データを一意に決める。と言う役割は一緒ですが、どういったところに違いがあるのか?に、注目しながらまとめていきたいと思います。

記事要約
  1. 【一意に決める】とはどう言うことか?が、わかります
  2. 【PRIMARY KEY】が、どう言った特性があるのか。が、わかります。
  3. UNIQUE との違いがわかります。
  4. サンプルと実行結果をご紹介します

目次

一意に決める。とは、どういうことか?

【一意】とは、データ内に重複がない状態。を指します。

複数データが入っているテーブル内で、重複があっては困るものがあります。

投資の世界で言うと、銘柄コードがあげられます。

【1111】【2222】【3333】という銘柄コードは互いに独立していて、同じ値ではありません。

そのため、この3つのレコードが同じテーブルに存在していても、それぞれ違った銘柄であることがわかります。

禄太
つまり、【一意】にきまるのです!

しかし、この銘柄コードが【1111】【1111】【1111】と、三つ並んでいたら、どれがどの銘柄かわからなくなってしまいます。

そのため、重複を許さない方法として、UNIQUEや、PRIMARYが、存在するのです。

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

【SQLite3】UNIQUE制約を列に付与して、データの重複を防止する

2022年11月19日

基本構文とサンプル

【基本構文】

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

【サンプルテーブル】

株価を管理するデータベースに新たに、marketテーブルを作成します。

market(取引市場)を管理するテーブルです。

marketテーブル
  1. 銘柄が上場している市場のマスタを管理します。
  2. mk_id(market_id)の列をPRIMARY KEYに指定します。
  3. データ型は、integer型で指定します。
  4. 10番代が【東京証券取引所】の市場とします。
  5. 20番代が【地方取引所】の市場とします。

【サンプルコード】

それでは、実際にテーブルを作成してみます。

mk_id integer primary key を記載することにより、プライマリキーとしての役割を付与します。

create table market(mk_id integer primary key, name text);

で、データを投入します。

実際に存在する市場を、INSERTしてみたいと思います。

insert into market(mk_id,name) values(10,'プライム');
insert into market(mk_id,name) values(11,'スタンダード');
insert into market(mk_id,name) values(12,'グロース');
insert into market(mk_id,name) values(20,'ネクスト');
insert into market(mk_id,name) values(21,'アンビシャス');
禄太
ここでは分かりにくいのですが、すでに存在する mk_id と同じ値でINSERTしようとすると、エラーになります。

【動作確認(画面)】

【補足:重複エラーメッセージ】

試しに、すでに存在する mk_id と同じ値をINSERTしてみたいと思います。

※市場名の部分は変えています(重複不可テスト)

insert into market(mk_id,name) values(10,'重複不可テスト');

以下の、エラーメッセージが出力されます。

エラーの内容は、UNIQUEの投稿で紹介したものと同じです。

禄太
一意になるはずの項目に、重複して値を入れようとしているよ!ということで、怒られます。

Runtime error: UNIQUE constraint failed: market.mk_id (19)

EOF

UNIQUEに続いて、PRIMARY KEY を利用して重複を避ける方法をまとめました。

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

また、次回!