【SQLite3】SQLでNotNull制約を付与して、データの未設定項目を防ぐ

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

SQLのNotNull制約ついて、ご紹介します。

データベースを作成していると、必ず値が入っていないといけない項目。を作成する場面があります。

NotNull制約を付与することによって、誤って値を入れずに更新されてしまうことを防ぐことができます。

記事要約
  • データベース作成の際、NotNull制約の記述方法をまとめています。
  • NotNull制約とはなにか?。
  • NotNull制約を付与することによって、どういったメリットがあるのか?

目次

Nullとは?

Nullとは値が何も入っていない状態を、指します。

データベースに対し、手動でINSERT文を発行する時に、誤って値を何も指定せずに実行してしまったとします。

その時に、データベースが制約を指定していなかった場合は、素直にNullを設定してしまいます。

制約をかけずに、データベースを作成した場合

例えば、以前作成したデータベースです。

株価を管理するデータで、終値に値が入っていなかった場合、どうなるでしょうか?

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

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

2022年10月14日

それは、一般投資家や機関投資家にとって、一大事です。

データが欠損してしまっていては、監視対象の銘柄の動向を把握・分析できなくなってしまいます。

NotNull制約をかける

多くのデータベースシステムでは、制約を書ける仕組みがあります。

型(StringやInteger)よりも強力なチェックをするイメージです。

禄太
例えば、XXの項目には値が必ず入るから、Nullが入ってきたらエラーを返して受け付けないようにしてね!

というお約束を、データベースに付与することができます。

SQLite3の場合は、記述方法は以下のように書きます。

CREATE TABLE テーブル名称(
項目名1 NOT NULL ,
項目名2  NOT NULL ,
項目名3 NOT NULL ,

〜〜〜(以下同様に記載)〜〜〜〜

);

listテーブル作成時のSQL

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)
);

値をNullにしてSQLを実行した場合の挙動

以下のSQLを実行してみます。

Volume(出来高)の項目に明示的にNullを指定しています。

Insert into list(MEI_CODE,MEI_MS,TRA_DATE,PRICE,ST_PRI,HI_PRI,LW_PRI,VOLUME)   values('9999','TEST_ろくた','20220201',1111,1111,1111,1111,Null);

【実行結果】

禄太
Runtime error: NOT NULL constraint failed: list.VOLUME (19)というエラーメッセージが返ってきました!
制約をかけたのに、Nullを入れようとしたので、出力されたエラーです。
試しにSELECT文で、テーブルの中身を確認していますが、INSERT文は失敗していることがわかります。

EOF

データ追加の際に、値の設定忘れがないよう、ご利用ください!

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

では、また