10月30日(木)3コマ目

今日、やったこと

  • チェック制約
  • 参照整合制約(外部キー制約)

今日のホワイトボード

チェック制約(列制約構文)

チェック制約とは、条件を満たすデータ以外は登録させないための制約

キーワードcheckにつづく( )内に条件を書く。

条件はwhere句と同じ。

図 チェック制約(列制約構文)

実際のSQLは以下のとおり。

①商品マスタテーブル作成

列制約構文で、価格列にチェック制約を設定。
図 商品マスタテーブル作成
※図中のコメントには”表制約構文”と書いてあるが、列制約構文の誤り

②商品マスタテーブルにデータ登録(正常系)

問題なく登録できる。
図 正常なデータを登録 => 登録できる

③商品マスタテーブルにデータ登録(異常系)

チェック制約に引っかかるデータを登録。
エラーになり、登録できない。
図 異常なデータを登録 => エラー発生 => 登録できない

なお、更新時もチェックされる。


 チェック制約(表制約構文)

表制約構文では、複数列で1つの条件を作ることもできる。

図 チェック制約(表制約構文)

実際のSQLは以下のとおり。

①商品マスタテーブル作成

表制約構文で、価格列にチェック制約を設定。
図 商品マスタテーブル作成(表制約構文)

②商品マスタテーブルにデータ登録(正常系)

問題なく登録できる。
図 正常なデータを登録 => 登録できる

③商品マスタテーブルにデータ登録(異常系)

チェック制約に引っかかるデータを登録。
エラーになり、登録できない。
図 異常なデータを登録 => エラー発生 => 登録できない

参照整合制約(外部キー制約)

今までの制約は1つのテーブル内で完結したが、参照整合制約は
  • 参照する側のテーブル(子テーブル
  • 参照される側のテーブル(親テーブル
両方をチェックする。

なお、参照される側(親テーブル)は主キー列が参照される。

参照する側(子テーブル)の別テーブルの主キーを参照する列を 外部キー と呼ぶ。


参照される側(親テーブル)として、グループマスタテーブルを作成、データを登録。

図 グループマスタテーブル(親テーブル)作成

図 グループマスタテーブルにデータ登録



参照整合制約(列制約構文)

キーワード references のあとに 参照先テーブル名( 列名 ) を指定。
図 参照整合制約(列制約構文)

実際のSQLは以下のとおり。

①商品マスタテーブル

列制約構文で、グループID列に 参照整合制約を設定。
なお、参照先は グループマスタテーブルのID列。
図 商品マスタテーブル作成(列制約構文)

②商品マスタテーブルにデータ登録(正常系)

問題なく登録できる。
図 商品マスタテーブルに正常なデータ登録 => 登録できる

③参照整合制約に違反する操作

商品マスタテーブルのグループID列に参照先にはない"4"を登録 => エラー発生
グループマスタテーブルの行を削除 => エラー発生
図 参照整合制約に違反する操作


参照整合制約(表制約構文)

キーワード foreign key の( )内に外部キー列(別テーブルの主キー列を参照する列)を指定。
キーワード references のあとに参照先テーブル名( 列名 )を指定。
図 参照整合制約(表制約構文)

実際のSQLは以下のとおり。

①商品マスタテーブル

表制約構文で、グループID列に 参照整合制約を設定。
外部キー列は グループID列。 => キーワード foreign key
参照先は グループマスタテーブルのID列。 => キーワード references
図 商品マスタテーブル作成(表制約構文)

②商品マスタテーブルにデータ登録(正常系)

問題なく登録できる。
図 商品マスタテーブルに正常なデータ登録 => 登録できる

③参照整合制約に違反する操作

商品マスタテーブルのグループID列に参照先にはない"4"を登録 => エラー発生
グループマスタテーブルの行を削除 => エラー発生
図 参照整合制約に違反する操作

次回は

練習問題をやってもらいます。


このブログの人気の投稿

1月22日(木)3コマ目

12月4日(木)3コマ目