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

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

データの中で重複が許されない場合、UNIQUE制約を付与することで、重複を回避することができます。

禄太
例えば、すでに2022年1月1日のA社の株価が登録されているのに、同じ日付同じ会社の株価が後から追加されたら困りますよね?!

今回は、UNIQUE制約の記述方法と実行結果をご紹介します。

記事要約
  1. UNIQUE制約のサンプル
  2. 動作確認

目次

UNIQUE制約とは?

UNIQUE制約は、他のデータと重複を許可しない制約です。

複数列を組み合わせて制約を付与することも可能です。

また、プライマリキーと異なり、Nullが複数行に存在することは可能です。

禄太
冒頭で述べたように、【同一銘柄に対して、同一日付のレコードが生成されない制約】を付与してみたいと思います!

記述方法とサンプル

制約を付与する際は、CREATE文を実行する際に、SQLの末尾に記述します。

###単一の列に対してUNIQUE制約を付与する###

CREATE TABLE テーブル名称(カラム名1 データ型        ,
                        カラム名2 データ型 UNIQUE ,
...);
###複数の列に対してUNIQUE制約を付与する###

CREATE TABLE テーブル名称(カラム名1 データ型,
                        カラム名2 データ型,
                        カラム名3 データ型,
                        カラム名4 データ型,
                        UNIQUE(カラム名2,カラム名4)
);
禄太
過去に、listテーブルを作成した際のSQLを見てみましょう!
MEI_CODE(銘柄コード)と、TRA_DATE(取引日)の列に制約を付与することによって、重複を防いでいます。
CREATE TABLE list(
MEI_CODE TEXT NOT NULL ,
MEI_MS TEXT  NOT NULL ,
TRA_DATE TEXT NOT NULL ,
PRICE REAL  NOT NULL ,
ST_PRI REAL  NOT NULL ,
HI_PRI REAL  NOT NULL ,
LW_PRI REAL  NOT NULL ,
VOLUME INTEGER  NOT NULL ,
UNIQUE(MEI_CODE,TRA_DATE)

###↑これが、UQIQUE制約!###

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

【SQLite3】データベースとSQL(実際にDBを作成して接続してみる)

2022年10月14日

実行結果(エラー画面)

禄太
ためしに、
MEI_CODE(銘柄コード)と、TRA_DATE(取引日)が重複したSQLを発行してみましょう。
UNIQUE constraint failed、で、エラーになって返ってきます。
insert into list values('9999','六太システム','20220101',1000.0,1000.0,1000.0,1000.0,5000);

EOF

システムの作り方として、データの重複を許さない場合は、注意が必要です。

その際に、UNIQUE制約でデータベース側で管理してもらえるように、有効に活用しましょう。

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

では、また!