データの中で重複が許されない場合、UNIQUE制約を付与することで、重複を回避することができます。
例えば、すでに2022年1月1日のA社の株価が登録されているのに、同じ日付同じ会社の株価が後から追加されたら困りますよね?!
今回は、UNIQUE制約の記述方法と実行結果をご紹介します。
記事要約
- UNIQUE制約のサンプル
- 動作確認
目次
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(取引日)の列に制約を付与することによって、重複を防いでいます。
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制約!###
);
実行結果(エラー画面)
ためしに、
MEI_CODE(銘柄コード)と、TRA_DATE(取引日)が重複したSQLを発行してみましょう。
UNIQUE constraint failed、で、エラーになって返ってきます。
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制約でデータベース側で管理してもらえるように、有効に活用しましょう。
本日も、一緒に学習してくださって、ありがとうございました!
では、また!