SQLのNotNull制約ついて、ご紹介します。
データベースを作成していると、必ず値が入っていないといけない項目。を作成する場面があります。
NotNull制約を付与することによって、誤って値を入れずに更新されてしまうことを防ぐことができます。
記事要約
- データベース作成の際、NotNull制約の記述方法をまとめています。
- NotNull制約とはなにか?。
- NotNull制約を付与することによって、どういったメリットがあるのか?
目次
Nullとは?
Nullとは値が何も入っていない状態を、指します。
データベースに対し、手動でINSERT文を発行する時に、誤って値を何も指定せずに実行してしまったとします。
その時に、データベースが制約を指定していなかった場合は、素直にNullを設定してしまいます。
制約をかけずに、データベースを作成した場合
例えば、以前作成したデータベースです。
株価を管理するデータで、終値に値が入っていなかった場合、どうなるでしょうか?
それは、一般投資家や機関投資家にとって、一大事です。
データが欠損してしまっていては、監視対象の銘柄の動向を把握・分析できなくなってしまいます。
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文は失敗していることがわかります。
制約をかけたのに、Nullを入れようとしたので、出力されたエラーです。
試しにSELECT文で、テーブルの中身を確認していますが、INSERT文は失敗していることがわかります。
EOF
データ追加の際に、値の設定忘れがないよう、ご利用ください!
本日も、一緒に学習してくださって、ありがとうございました!
では、また