SQLパズルの初手に出てくるCONSTRAINT…CHECKって何者?

BigQuery
元教師
元教師

こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!

今回の記事ではSQLの名著「SQLパズル」に出てきた「CONSTRAINT … CHECK」が初見すぎたので、調べた内容を噛み砕いて説明していきたいと思います!

同じようにSQLパズルに取り組んでいて「CONSTRAINT .. CHECKってそういうことだったのね!」となってくださる方がいると幸いです!

CONSTRAINTとは?

CONSTRAINTとは、日本語に訳すと「制約」を意味します。

つまり、CONSTRAINT .. CHECKとは「チェック制約」を意味し、テーブル定義(DDL)においてカラムに一定の制約をつけるための構文だということが分かります。

例えば、以下のようにCONSTRAINT .. CHECKを使って制約をつけると、salesカラムやpriceカラムには0以下の数字を入れることができません。

CREATE TABLE SalesOrder
(
	item_code INTEGER,
	sales     INTEGER,

    -- 販売個数が0より大きくなるように制約をつける
	CONSTRAINT valid_sales
		CHECK( sales > 0),
	price     INTEGER,

    -- 価格が0より大きくなるように制約をつける
	CONSTRAINT  valid_price
		CHECK( price > 0)
)

上記で定義したテーブルSalesOrderに対して、salesが0であるようなデータをINSERTしようとすると、以下のようなエラーが発生します。

INSERT INTO SalesOrder VALUES(123, 0, 200);

エラーメッセージを見てみると、

「リレーションSalesOrderに入れようとした新しい行はチェック制約valid_salesに違反してるから入れられへんで」

と言われていることが分かります。

まとめ

今回の記事では、非常に簡潔ではありますが、CONSTRAINT …CHECKの使い方について解説してみました!

不適切なデータが入ってこないための事前防止策としてCONSTRAINT…CHECKは有用だと思うので、皆さんもぜひ使ってみてください!

コメント

タイトルとURLをコピーしました