プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • SQL
  • 【SQL】「制約」の種類と使い方
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【SQL】「制約」の種類と使い方

06.22

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

制約の種類

制約名 説明
NOT NULL制約 NULLを許容しない。
UNIQUE制約 重複値を許可しないです。(ただし、NULLの重複は許可します。)
PRIMARY KEY制約(主キー制約) 表の値を一意に識別できる値のみ許可する。
FOREIGN KEY制約(外部キー制約) 参照先にある値、またはNULL値のみ許可する。
CHECK制約(チェック制約) 指定した条件に合う値のみ許可する。

NOT NULL制約

特徴

  • NULLを許容しない。
  • 列レベルにしか適用できません。

UNIQUE制約

特徴

  • 重複した値を格納できなくなるが、NULL値は重複可能。
  • この制約を定義すると、自動でこの制約名の索引が作成されます。
  • 複合列で、UNIQUE制約を定義する場合は、表レベルの制約定義を使う。

PRIMARY KEY(主キー)制約

  • 重複値や、NULL値は格納することができません。
  • 表に一つのみ定義できます。
  • この制約を定義すると、自動でこの制約名の索引が作成されます。
  • 複合列で、PRIMARY KEY制約を定義する場合は、表レベルの制約定義を使う。

FOREIGN KEY(外部キー)制約

  • 参照先の列に存在する値のみしか格納できなくなる。
  • NULL値を含めることは可能。
  • FOREIGN KEYは、「UNIQUE制約」、「PRIMARY KEY制約」が定義されている列しか定義できない。
  • FOREIGN KEY制約を定義すると、親表は削除できない。

親表からデータを削除した際の、動作を指定できるキーワード

キーワード 説明
指定なし 子表に親表を参照する行が存在する場合は、親表の参照されている行は削除できない。
ON DELETE CASCADE 子表に親表を参照する行が存在する場合に、親表の参照されている行を削除すると、子表のデータも削除される。
ON DELETE SET NULL 子表に親表を参照する行が存在する場合に、親表の参照されている行を削除すると、子表のデータにNULLが設定される。

また、そもそも外部キーを使った方がよいのかの見解に関しては、下記の記事でしておりますので、ご参考下さい。

【データベース】「外部キー」、「リレーション」について

CHECK制約

  • その列に指定した条件に対して、TRUEまたはNULLを返す値しか格納できなくなる。
  • 1つの列に複数CHECK制約を定義することも可能です。
  • 基本的には、WHERE句に指定する条件と同じ条件を指定することができます。

制約の定義(列レベル、表レベル)

制約の定義の範囲としては、下記の2種類があります。

  • 列レベル制約
  • 表レベル制約

列レベル制約

構文

1
2
3
CREATE TABLE 表名{
  列名 データ型 CONSTRAINT 制約名 制約の種類
}

列レベル制約を適用する際のポイント

1つの列に複数の列レベル制約を定義する際は、改行またはスペースで区切ります。

表レベル制約

構文

1
2
3
4
5
CREATE TABLE 表名{
  列名1 データ型,
  列名2 データ型,
  CONSTRAINT 制約名 制約の種類(列名1,列名2…)
}

表レベル制約を適用する際のポイント

  • 制約を定義する列を1つ以上指定します。
  • NOT NULL制約は適用できません。
  • 複数列の組み合わせからなる制約(複数列に対するUNIQUE制約の定義等)は、表レベル制約のみで定義できます。
  • 1つの表に、複数の表レベル制約を定義する際は、カンマで区切ります。

列レベル制約、表レベル制約共通のポイント

  • 1つのCREATE文に、列レベル制約と、表レベル制約を同時に指定できます。
  • NOT NULL制約は、「列レベル制約のみ」しか定義できません。
スポンサーリンク
  • 2018 06.22
  • miyabisan2
  • コメントを書く
  • Oracle, SQL
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 06.21

    【SQL】「サブクエリ(副問い合わせ)」について

  2. 2021 11.07

    【SQL】「WHERE + OR」か「UNION」を使った方が良いか?

  3. 2018 06.21

    【SQL】「述語」(BETWEEN、IN、EXISTS等)の種類

  4. 2018 05.22

    【Oracleアーキテクチャ】「データファイル」の構造について

  5. 2018 06.21

    【SQL】関数一覧

  6. 2018 04.28

    【Oracle】サーバー側のリモート接続設定(listener.oraの作成)、クライアントPC側のリモート接続設定(tnsnames.oraの作成)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Oracle】「データ型」の種類

【システム開発】「環境」の種類(ローカル、開発、ステー…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Git
  • GitLab
  • GraphQL
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • WebRTC
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー