CONSTRAINT 節

CONSTRAINT節ã?¯ã€?CREATE TABLE 文やALTER TABLE æ–‡ã?«ä»»æ„?ã?«è¨˜è¿°ã?§ã??る構造ã?§ã?™ã€‚制約ã?¨ã?¯ãƒ‡ãƒ¼ã‚¿ã?Œå¾“ã‚?ã?ªã?‘れã?°ã?ªã‚‰ã?ªã?„è¦?則ã?§ã?™ã€‚制約ã?«ã?¯å¿…è¦?ã?«å¿œã?˜ã?¦å??å‰?を与ã?ˆã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚

制約�以下���れ���。
  • 列レベルã?®åˆ¶ç´„

    列レベルã?®åˆ¶ç´„ã?¯è¡¨ã?«ã?‚ã‚‹å?˜ä¸€ã?®åˆ—ã‚’å?‚ç…§ã?—ã?¾ã?™ã€‚列å??を指定ã?™ã‚‹ã‚?ã?‘ã?§ã?¯ã?ªã‚Šã?¾ã?›ã‚“。(ã?Ÿã? ã?—ãƒ?ェック制約ã?¯é™¤ã??ã?¾ã?™ã€‚)ã?“ã?®åˆ¶ç´„ã?¯å¯¾è±¡ã?®åˆ—ã‚’å?‚ç…§ã?—ã?¦ã?„ã?¾ã?™ã€‚

  • 表レベルã?®åˆ¶ç´„

    表レベルã?®åˆ¶ç´„ã?¯è¡¨ã?«ã?‚る一ã?¤ã?‚ã‚‹ã?„ã?¯ã??れ以上ã?®åˆ—ã‚’å?‚ç…§ã?—ã?¾ã?™ã€‚表レベルã?®åˆ¶ç´„ã?¯é?©ç”¨ã?™ã‚‹åˆ—ã?®å??å‰?ã‚’å?‚ç…§ã?—ã?¾ã?™ã€‚表レベルã?®ãƒ?ェック制約ã?¯0以上ã?®åˆ—ã‚’å?‚ç…§ã?—ã?¾ã?™ã€‚

列制約��以下��り��。
  • NOT NULL

    ã?“ã?®åˆ—ã?®å€¤ã?¯NULLã?«ã?§ã??ã?ªã?„ã?“ã?¨ã‚’指定ã?—ã?¾ã?™ã€‚(ã?“ã?®ç¨®é¡žã?®åˆ¶ç´„ã?«ã?¯å??å‰?を与ã?ˆã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?›ã‚“。)

  • PRIMARY KEY

    列�より表中�行�一��識別�れる��を指定���。列�値�NOT NULL�定義�れ��れ��り��ん。

    注: ALTER TABLEã?«ã‚ˆã‚Šä¸»ã‚­ãƒ¼ã‚’追加ã?—よã?†ã?¨ã?—ã?¦ã€?空ã?®å€¤ã‚’æŒ?ã?¤åˆ—ã‚’ã??ã?®ä¸»ã‚­ãƒ¼ã?«å?«ã‚?よã?†ã?¨ã?—ã?Ÿå ´å?ˆã€?エラーã?¨ã?ªã?£ã?¦ä¸»ã‚­ãƒ¼ã?¯è¿½åŠ ã?•れã?¾ã?›ã‚“。より詳細ã?ªæƒ…å ±ã?¯ã€?ALTER TABLE 文をå?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。
  • UNIQUE

    列�値�一����れ��ら���指定���。NULL�値�����。

  • FOREIGN KEY

    列�値���照先�主キー�一�キー�る��NULL���れ��ら����を指定���。

  • CHECK

    列�値��則を指定���。

表制約��以下��り��。
  • PRIMARY KEY

    一�以上�列�より表�行�一��識別�れる��を表���。NULL�値�����。

  • UNIQUE

    列群�値�一���る�指定���。列�NOT NULL�定義�れ��れ��り��ん。

  • FOREIGN KEY

    列群�値��照先�主キー�一�列�る��NULL���れ��ら����を指定���。

    注: 外部キーã?Œè¤‡æ•°ã?®åˆ—ã?‹ã‚‰æ§‹æˆ?ã?•れã?¦ã?„ã‚‹å ´å?ˆã€?何れã?‹ã?®åˆ—ã?ŒNULLã?§ã?‚ã‚‹ã?ªã‚‰ã‚­ãƒ¼ã?¯NULLã?¨è¦‹ã?ªã?•れã?¾ã?™ã€‚NULLã?§ã?ªã?„列ã?«ã?©ã?®ã‚ˆã?†ã?ªå€¤ã?Œã?‚ã?£ã?¦ã‚‚ã€?挿入ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚
  • CHECK

    表�値��用�れる様々��則を指定���。

列制約ã?¨è¡¨åˆ¶ç´„ã?¯å?Œã?˜æ©Ÿèƒ½ã‚’æŒ?ã?¡ã?¾ã?™ã?Œã€?何ã?«å¯¾ã?—ã?¦æŒ‡å®šã?§ã??ã‚‹ã?‹ã?Œé?•ã?„ã?¾ã?™ã€‚表制約ã?§ã?¯ä¸€ã?¤ä»¥ä¸Šã?®åˆ—ã?«å¯¾ã?—ã?¦ã€?PRIMARY KEYã€?UNIQUEã€?CHECKã€?FOREIGN KEY制約を定義ã?§ã??ã?¾ã?™ã€‚列レベルã?®åˆ¶ç´„ã?§ã?¯(ãƒ?ェック制約を除ã?„ã?¦)ã€?一ã?¤ã?®åˆ—ã?¸ã?®å?‚ç…§ã?—ã?‹å®šç¾©ã?§ã??ã?¾ã?›ã‚“。

æ§‹æ–‡

主キー�一�性制約

主キー��表�行を一��指定�る列�集��定義�れ��。

主キー制約を定義ã?—ã?—ã?Ÿå ´å?ˆã€?主キーã?«å?«ã?¾ã‚Œã‚‹ä½•れã?®åˆ—ã?®å€¤ã‚‚NULLã?§ã?‚ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。ã?¤ã?¾ã‚Šä½•れã?®åˆ—ã‚‚NULL値をã?¨ã‚‹ã?“ã?¨ã?Œã?§ã??ã?ªã??ã?ªã‚Šã?¾ã?™ã€‚

ã?‚らã?‹ã?˜ã‚?NOT NULLã?¨å®šç¾©ã?•れã?¦ã?„ã‚‹ã?ªã‚‰ã€?既存ã?®åˆ—ã‚’ALTER TABLE ADD PRIMARY KEY ã?¨ã?„ã?†æ–‡ã?§ä¸»ã‚­ãƒ¼ã?«åŠ ã?ˆã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚NULLã?®å€¤ã?¯ä¸?å?¯ã?§ã?™ã€‚ã‚‚ã?—列ã?«NULL値ã?Œã?‚れã?°ã€?システムã?¯ä¸»ã‚­ãƒ¼åˆ¶ç´„ã?®è¿½åŠ ã‚’è¡Œã?„ã?¾ã?›ã‚“。詳細ã?ªæƒ…å ±ã?¯ALTER TABLE 文をå?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。

表ã?«ã?¯PRIMARY KEY制約を一ã?¤ã?¾ã?§ã?—ã?‹å®šç¾©ã?§ã??ã?¾ã?›ã‚“。ã?—ã?‹ã?—複数ã?®UNIQUE制約を定義ã?™ã‚‹ã?“ã?¨ã?¯ã?§ã??ã?¾ã?™ã€‚

外部キー制約

外部キー制約ã?«ã‚ˆã‚Šã€?データベースã?®å?‚ç…§æ•´å?ˆæ€§ã‚’強制ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚外部キーã?¨ã?¯ä»–ã?®è¡¨ã?®ã‚­ãƒ¼ã‚’å?‚ç…§ã?™ã‚‹åˆ—ã?‚ã‚‹ã?„ã?¯åˆ—群ã?§ã?™ã€‚(時ã?«ã‚ˆã?£ã?¦ã?¯ã?‚ã?¾ã‚Šå¤šã?„ã?“ã?¨ã?§ã?¯ã?‚りã?¾ã?›ã‚“ã?Œã€?å?Œã?˜è¡¨ã‚’å?‚ç…§ã?™ã‚‹ã?“ã?¨ã‚‚ã?‚りã?¾ã?™ã€‚)外部キーã?¯å?‚ç…§å…ˆã?®ä¸»ã‚­ãƒ¼åˆ¶ç´„・外部キー制約ã?«ä¸€è‡´ã?™ã‚‹ãƒ‡ãƒ¼ã‚¿åž‹ã‚’æŒ?ã?¤åˆ—ã‚’æŒ?ã?Ÿã?ªã?‘れã?°ã?ªã‚Šã?¾ã?›ã‚“。

表レベルã?®å¤–部キー制約ã?§ã?¯ã€?表ã?®åˆ—を指定ã?—ã?¦åˆ¶ç´„を定義ã?—ã?¾ã?™ã€‚ã?“ã?®ã?¨ã??å?Œã?˜åˆ—を一回より多ã??使ã?†ã?“ã?¨ã?¯ã?§ã??ã?¾ã?›ã‚“。

å?‚照定義(å?‚ç…§ã?•れる表ã?®åˆ—ã?®ä¸€è¦§ã?§ã?™ã€‚)ã?«åˆ—ã?Œå®šç¾©ã?•れる場å?ˆã€?ã??れã?¯å?‚ç…§å…ˆã?®è¡¨ã?«ã?‚る一æ„?性制約ã?‚ã‚‹ã?„ã?¯ä¸»ã‚­ãƒ¼åˆ¶ç´„ã?«å¯¾å¿œã?—ã?¦ã?„ã?ªã?‘れã?°ã?ªã‚Šã?¾ã?›ã‚“。 ã‚‚ã?—表ã?«ä¸€æ„?性制約ã?Œã?‚ã‚‹ã?ªã‚‰ã€?å?‚照定義ã?§ã?¯åˆ—ã?®ä¸€è¦§ã‚’çœ?ã??ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚

ã‚‚ã?—å?‚照定義ã?«ã?¦åˆ—ã?®ä¸€è¦§ã?ŒæŒ‡å®šã?•れã?¦ã?Šã‚‰ã?šã€?å?‚ç…§å…ˆã?®è¡¨ã?«ä¸»ã‚­ãƒ¼ã‚‚定義ã?•れã?¦ã?„ã?ªã?„ã?ªã‚‰ã?°ã€?例外ã?ŒæŒ™ã?Œã‚Šã?¾ã?™ã€‚(ã?“ã?®ä¾‹å¤–ã?¯ã€?ã‚‚ã?—å?‚ç…§å…ˆã?®è¡¨ã?«ä¸€æ„?性制約ã?—ã?‹ã?ªã?„ã?ªã‚‰ã?°ã€?ã??ã?®åˆ—ã?®ä¸€è¦§ã‚’å?‚照定義ã?«å?«ã‚?ã?ªã?‘れã?°ã?ªã‚‰ã?ªã?„ã€?ã?¨ã?„ã?†æ„?味ã?§ã?™ã€‚)

�照先�一�性制約�る��主キー制約�一致�る値��れ��外部キー制約�守られ��るも���れ��。も�外部キー制約�複数�列�定義�れ��り���れ��列�NULL��る�ら�外部キー�値�NULL����れ��。
注: SQL-92標準ã?«ã?¦è¨€å?Šã?Œã?‚るよã?†ã?«ã€?複数ã?®åˆ—ã?§å®šç¾©ã?•れã?Ÿå¤–部キー制約ã?§ã?¯ã€?制約ã?•れã?Ÿåˆ—ã?Œå?‚ç…§å…ˆã?®åˆ—ã?«ã?ªã?„値をã?¨ã‚‹ã?“ã?¨ã?Œå?¯èƒ½ã?ªå ´å?ˆã?Œã?‚りã?¾ã?™ã€‚ã?“ã?®çжæ³?を回é?¿ã?™ã‚‹ã?Ÿã‚?ã?«å¤–部キーã?®å…¨åˆ—ã?«ã?¯NOT NULL制約を定義ã?™ã‚‹ã?¹ã??ã?§ã?™ã€‚

外部キー制約�DML

有効ã?«ã?ªã?£ã?¦ã?„る外部キー制約ã?Œå®šç¾©ã?•れã?Ÿè¡¨ã?«æŒ¿å…¥ã‚„æ›´æ–°ã?Œè¡Œã‚?れるã?¨ã??ã€?Derbyã?¯ã??ã?®è¡Œã?Œå¤–部キー制約を破ã?£ã?¦ã?„ã?ªã?„ã?‹çŸ¥ã‚‹ã?Ÿã‚?ã?«ã€?å?‚ç…§å…ˆã?®è¡¨ã?§å¯¾å¿œã?™ã‚‹å?‚照キーã?®å€¤ã‚’調査ã?—ã?¾ã?™ã€‚ ã‚‚ã?—制約ã?Œå®ˆã‚‰ã‚Œã?¦ã?„ã?ªã?‘れã?°ã€?Derbyã?¯ä¾‹å¤–を挙ã?’ã?¦ã€?挿入ã?ªã?„ã?—æ›´æ–°ã‚’å?´ä¸‹ã?—ã?¾ã?™ã€‚

å?‚ç…§ã?•れã?Ÿã‚­ãƒ¼(外部キーã?«ã‚ˆã‚Šå?‚ç…§ã?•れるã€?主キー制約ã?‚ã‚‹ã?„ã?¯ä¸€æ„?制約)ã?®ã?‚る表ã?®è¡Œã‚’ã€?æ›´æ–°ã?¾ã?Ÿã?¯å‰Šé™¤ã?—ã?Ÿå ´å?ˆã€?Derbyã?¯ã??ã?®ã‚­ãƒ¼ã‚’å?‚ç…§ã?™ã‚‹ã?™ã?¹ã?¦ã?®å¤–部キー制約を調ã?¹ã?¦ã€?行ã?®å‰Šé™¤ã‚„変更ã?Œåˆ¶ç´„é?•å??を引ã??èµ·ã?“ã?•ã?ªã?„ã?‹èª¿æŸ»ã?—ã?¾ã?™ã€‚ ã‚‚ã?—行ã?¸ã?®å‰Šé™¤ã‚„変更ã?Œåˆ¶ç´„é?•å??を引ã??èµ·ã?“ã?™ã?®ã?§ã?‚れã?°ã€?変更や削除ã?¯è¨±å?¯ã?•れã?šDerbyã?¯ä¾‹å¤–を挙ã?’ã?¾ã?™ã€‚

Derby�制約��ェックを行���文�実行�れる時��。トランザクション�コミット�れる時���り��ん。

支��る索引

UNIQUEã€?PRIMARY KEYã€?FOREIGN KEYã?®å?„制約ã?¯åˆ¶ç´„を強制ã?‚ã‚‹ã?„ã?¯æ”¯æ?´ã?™ã‚‹ã?Ÿã‚?ã?®ç´¢å¼•を生æˆ?ã?—ã?¾ã?™ã€‚(ã?“れã?¯æ”¯æ?´ç´¢å¼•ã?¨å‘¼ã?°ã‚Œã‚‹ã?“ã?¨ã?Œã?‚りã?¾ã?™ã€‚) UNIQUE制約ã?¨PRIMARY KEY制約ã?¯ä¸€æ„?索引を生æˆ?ã?—ã?¾ã?™ã€‚FOREIGN KEY索引ã?¯é?žä¸€æ„?ã?ªç´¢å¼•を作æˆ?ã‚“ã?—ã?¾ã?™ã€‚ã?—ã?Ÿã?Œã?£ã?¦ã€?列や列ã?®é›†å?ˆã?«UNIQUE制約やPRIMARY KEY制約ã€?FOREIGN KEY索引ã?Œå®šç¾©ã?•れã?¦ã?„ã‚‹å ´å?ˆã?¯ã€?パフォーマンスå?‘上ã?®ã?Ÿã‚?ã?®ç´¢å¼•ã‚’ã??れらã?®åˆ—ã?«ä½œæˆ?ã?™ã‚‹å¿…è¦?ã?¯ã?‚りã?¾ã?›ã‚“。Derbyã?Œä»£ã‚?りã?«ä½œæˆ?ã?—ã?¦ã??れã?¦ã?„ã?¾ã?™ã€‚索引ã?¨åˆ¶ç´„ã‚‚å?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。

å•?ã?„å?ˆã‚?ã?›ã‚’最é?©åŒ–ã?•れる時ã?«ã‚ªãƒ—ティマイザã?¯ã?“れらã?®ç´¢å¼•を利用ã?§ã??ã?¾ã?™ã€‚(CREATE INDEX 文をå?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。)ã?¾ã?Ÿã?“れらã?®ç´¢å¼•ã?¯ã‚·ã‚¹ãƒ†ãƒ ã?Œè‡ªå‹•çš„ã?«ç”Ÿæˆ?ã?—ã?Ÿå??å‰?ã‚’æŒ?ã?¡ã?¾ã?™ã€‚

支æ?´ç´¢å¼•ã?¯DROP INDEXæ–‡ã?§ã?¯ç ´æ£„ã?§ã??ã?¾ã?›ã‚“。制約を破棄ã?™ã‚‹ã?‹ã€?表を破棄ã?™ã‚‹å¿…è¦?ã?Œã?‚りã?¾ã?™ã€‚

�ェック制約

ãƒ?ェック制約ã?¯è¡¨ã?®å†…容ã?«é–¢ã?™ã‚‹æ§˜ã€…ã?ªè¦?則を指定ã?™ã‚‹ã?Ÿã‚?ã?«åˆ©ç”¨ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚ãƒ?ェック制約ã?«ã?¯(真å?½å¼?ã?§è¨˜è¿°ã?•れる)検索æ?¡ä»¶ã‚’指定ã?§ã??ã?¾ã?™ã€‚表中ã?®å…¨è¡Œã?«ã?¤ã?„ã?¦ã€?ã?“ã?®æ¤œç´¢æ?¡ä»¶ã?¯æº€ã?Ÿã?•れã?¦ã?„ã?ªã?‘れã?°ã?ªã‚Šã?¾ã?›ã‚“。INSERTã‚„UPDATEã?«ã‚ˆã‚Šè¡Œã?Œå¤‰æ›´ã?•れる時ã€?検索æ?¡ä»¶ã?¯å¤‰æ›´ã?•れる行ã?«å¯¾ã?—ã?¦é?©ç”¨ã?•れã?¾ã?™ã€‚何れã?‹ã?®ãƒ?ェック制約ã?«é?•å??ã?™ã‚‹ã?¨ã€?文全体ã?Œä¸­æ–­ã?•れã?¾ã?™ã€‚

検索�件��件

ãƒ?ェック制約ã?Œåˆ—定義ã?®ä¸€éƒ¨ã?¨ã?—ã?¦æŒ‡å®šã?•れã?Ÿå ´å?ˆã€?制約ã?¯å?Œã?˜åˆ—ã?®ã?¿å?‚ç…§ã?§ã??ã?¾ã?™ã€‚ 表ã?®å®šç¾©ã?®ä¸€éƒ¨ã?¨ã?—ã?¦æŒ‡å®šã?•れã?Ÿãƒ?ェック制約ã?¯ã€?CREATE TABLEæ–‡ã?«ã?¦å…ˆç«‹ã?£ã?¦å®šç¾©ã?•れã?Ÿåˆ—ã‚’å?‚ç…§ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚

検索æ?¡ä»¶ã?¯å?Œã?˜å€¤ã?«é?©ç”¨ã?•れã?Ÿå ´å?ˆã€?常ã?«å?Œã?˜å€¤ã‚’è¿”ã?™å¿…è¦?ã?Œã?‚りã?¾ã?™ã€‚ã?—ã?Ÿã?Œã?£ã?¦ã€?以下ã?®ã?„ã?šã‚Œã‚‚検索æ?¡ä»¶ã?«ã?¯ç½®ã??ã?“ã?¨ã?Œã?§ã??ã?¾ã?›ã‚“。
  • å‹•çš„ã?ªãƒ‘ラメータ (?)
  • 日時関数 (CURRENT_DATEã€?CURRENT_TIMEã€?CURRENT_TIMESTAMP)
  • 副å•?ã?„å?ˆã‚?ã?›
  • ユーザー関数 (例ã?ˆã?°USERã€?SESSION_USERã€?CURRENT_USER)

�照先�従�動作

外部キーã?®å®šç¾©ã?«ã?¦ã€?動作(CASCADEã€?RESTRICTã€?SET NULLã?Šã‚ˆã?³NO ACTION)ã?Œé?©åˆ‡ã?«æ›¸ã?‹ã‚Œã?ŸON DELETE節や/ã?¨ON UPDATE節を記述ã?§ã??ã?¾ã?™ã€‚ ã?“れらã?®ç¯€ã?¯ã€?表ã?®ä¸»ã‚­ãƒ¼ã?Œæ›´æ–°ã?ªã?„ã?—削除ã?•れã?Ÿã?¨ã??ã?«ã€?外部キーã?®é–¢ä¿‚ã?Œæ??ã?ªã‚?れã?ªã?„よã?†ã?«ã€?対応ã?™ã‚‹å¤–部キーを変更ã?—ã?Ÿã‚Šã€?æ“?作を拒絶ã?—ã?Ÿã‚Šã?™ã‚‹äº‹ã‚’記述ã?—ã?¾ã?™ã€‚

å?‚照性ã?®åˆ¶ç´„ã?®å®šç¾©ã‚’行ã?†ã?¨ã??ã€?ä½µã?›ã?¦æ›´æ–°ã?¾ã?Ÿã?¯å‰Šé™¤ã?®è¦?則を定義ã?§ã??ã?¾ã?™ã€‚

æ›´æ–°ã?®è¦?則ã?¯ã€?親ã?‚ã‚‹ã?„ã?¯ä¾?å­˜ã?™ã‚‹è¡¨ã?®è¡Œã?Œæ›´æ–°ã?•れã?Ÿã?¨ã??ã?«é?©ç”¨ã?•れã?¾ã?™ã€‚指定ã?§ã??ã‚‹ã?®ã?¯ã€?NO ACTIONã?‚ã‚‹ã?„ã?¯RESTRICTã?§ã?™ã€‚

親表ã?®ä¸»ã‚­ãƒ¼ã?®å€¤ã?Œæ›´æ–°ã?•れã€?æ›´æ–°ã?®è¦?則ã?ŒRESTRICTã?§ã?‚ã?£ã?Ÿå ´å?ˆã€?Derbyã?¯ä¾?å­˜ã?™ã‚‹è¡¨ã?®å¤–部キー制約を調ã?¹ã?¾ã?™ã€‚ã‚‚ã?—ä¾?存表ã?®ä½•れã?‹ã?®è¡Œã?Œå¤–部キー制約é?•å??ã?¨ã?ªã‚‹ã?ªã‚‰ã€?トランザクションã?¯å·»ã??戻ã?•れã?¾ã?™ã€‚

ã‚‚ã?—æ›´æ–°ã?®è¦?則ã?ŒNO ACTIONã?§ã?‚ã?£ã?Ÿã?ªã‚‰ã€?Derbyã?¯æ›´æ–°ã?Œå…¨ã?¦çµ‚ã‚?ã?£ã?Ÿå¾Œã?‹ã‚‰ãƒˆãƒªã‚¬ã?Œå®Ÿè¡Œã?•れるå‰?ã?«ã€?ä¾?å­˜ã?™ã‚‹è¡¨ã?®å¤–部キー制約をãƒ?ェックã?—ã?¾ã?™ã€‚ã‚‚ã?—何れã?‹ã?®è¡Œã?Œå¤–部キー制約é?•å??ã?§ã?‚ã‚‹ã?ªã‚‰ã€?æ–‡ã?®å®Ÿè¡Œã?¯å?´ä¸‹ã?•れã?¾ã?™ã€‚

ä¾?å­˜ã?™ã‚‹è¡¨ã?«ã?‚る列ã?®å€¤ã?Œå¤‰æ›´ã?•れã€?ã??ã?®å€¤ã?Œå¤–部キーã?®ä¸€éƒ¨ã?§ã?‚ã?£ã?Ÿå ´å?ˆã€?æ›´æ–°ã?®è¦?則ã?¯æš—黙裡ã?«NO ACTIONã?¨ã?ªã‚Šã?¾ã?™ã€‚NO ACTIONã?§ã?‚ã‚‹ã?¨ã?„ã?†ã?“ã?¨ã?¯ã€?外部キーã?Œç©ºã?§ã?¯ã?ªã?„値ã?«æ›´æ–°ã?•れã?Ÿæ™‚ã€?更新後ã?®å€¤ã?¯è¦ªè¡¨ã?®ä¸»ã‚­ãƒ¼ã?¨ä¸€è‡´ã?—ã?ªã?‘れã?°ã?ªã‚‰ã?ªã?„ã?“ã?¨ã‚’æ„?味ã?—ã?¾ã?™ã€‚ã‚‚ã?—親表ã?®ä¸»ã‚­ãƒ¼ã?¨ä¸€è‡´ã?—ã?ªã?„ã?®ã?§ã?‚れã?°ã€?æ–‡ã?¯å?´ä¸‹ã?•れã?¾ã?™ã€‚

削除ã?®è¦?則ã?¯è¦ªè¡¨ã?®è¡Œã?Œå‰Šé™¤ã?•れã€?ã??ã?®è¡Œã?«ä¾?å­˜ã?™ã‚‹è¡Œã?Œå?‚照性制約ã?®ä¾?存表ã?«ã?‚ã‚‹å ´å?ˆã?«é?©ç”¨ã?•れã?¾ã?™ã€‚ã?“ã?®ã?¨ã??ä¾?存表ã?®è¡Œã‚‚削除ã?•れるã?“ã?¨ã?Œã?‚りã€?ã?“れを親表ã?®å‰Šé™¤ã?Œä¾?存表ã?«ä¼?æ’­ã?—ã?Ÿã?¨ã?„ã?„ã?¾ã?™ã€‚ã‚‚ã?—ä¾?存表ã?Œè¦ªè¡¨ã?§ã‚‚ã?‚ã‚‹ã?ªã‚‰ã?°ã€?今度ã?¯ã??ã?“ã?«å®šç¾©ã?•れã?Ÿå‹•作ã?Œã??ã?®ä¾?存表ã?«é?©ç”¨ã?•れã?¾ã?™ã€‚

指定ã?§ã??る値ã?¯ã€?NO ACTIONã€?RESTRICTã€?CASCADEã€?ã??れã?¨SET NULLã?§ã?™ã€‚SET NULLã?¯å¤–部キーã?®ä½•れã?‹ã?®åˆ—ã?Œnullã?®å€¤ã‚’æŒ?ã?¤ã?“ã?¨ã?Œã?§ã??ã‚‹å ´å?ˆã?®ã?¿æŒ‡å®šã?§ã??ã?¾ã?™ã€‚

も�削除��則��

NO ACTIONã?ªã‚‰Derbyã?¯ä¾?存表ã?®å¤–部キー制約をã€?削除ã?Œå…¨ã?¦çµ‚ã‚?ã?£ã?Ÿå¾Œã?‹ã‚‰ãƒˆãƒªã‚¬ã?Œå®Ÿè¡Œã?•れるå‰?ã?«ãƒ?ェックã?—ã?¾ã?™ã€‚ã‚‚ã?—ä¾?存表ã?®ä½•れã?‹ã?®è¡Œã?Œå¤–部キー制約ã?«é?•å??ã?™ã‚‹ã?ªã‚‰æ–‡ã?¯å?´ä¸‹ã?•れã?¾ã?™ã€‚

RESTRICTã?ªã‚‰ã€?Derbyã?¯ä¾?存表ã?®å¤–部制約を調ã?¹ã€?ä¾?存表ã?®ä½•れã?‹ã?®è¡Œã?Œå¤–部キー制約ã?«é?•å??ã?™ã‚‹å ´å?ˆã€?トランザクションを巻ã??戻ã?—ã?¾ã?™ã€‚

CASCADE�ら�削除��存表��播�れ��。(�用�能��播先��存表�も�播���。)

SET NULLã?ªã‚‰ã€?ä¾?存表ã?®å¤–部キーã?«ã?¦ç©ºã?«ã?§ã??る列ã?®å€¤ã?Œç©ºã?«ã?ªã‚Šã?¾ã?™ã€‚(ã?“ã?®å ´å?ˆã‚‚ã€?ä¾?存表ã?«ä¾?å­˜ã?™ã‚‹è¡¨ã?«ã?‚る外部キーã?®ç©ºã?«ã?§ã??る列ã?®å€¤ã?¯ç©ºã?«ã?ªã‚Šã?¾ã?™ã€‚)

表を親ã?¨ã?™ã‚‹å?‚照性ã?®åˆ¶ç´„ã?«ã?¯ã€?個々ã?®å‰Šé™¤ã?®è¦?則ã?Œã?‚りã?¾ã?™ã€‚ã??ã?—ã?¦é?©ç”¨ã?•れる全ã?¦ã?®å‰Šé™¤ã?®è¦?則ã?«ã‚ˆã?£ã?¦ã€?削除処ç?†ã?®çµ?æžœã?Œæ±ºã?¾ã‚Šã?¾ã?™ã€‚ ã?—ã?Ÿã?Œã?£ã?¦ä¾?存先ã?ŒRESTRICTã‚„NO ACTIONã?®å?‚照性制約をもã?¤ã?ªã‚‰ã€?行ã?¯å‰Šé™¤ã?§ã??ã?¾ã?›ã‚“。 å?Œæ§˜ã?«å‰Šé™¤ã?Œä¼?æ’­ã?—ã?¦ã‚†ã??å ´å?ˆã?§ã‚‚ã€?ä¼?æ’­å…ˆã?®ä¾?存行ã?®å?‚照性制約ã?«ã?¦å‰Šé™¤ã?®è¦?則ã?ŒRESTRICTã‚„NO ACTIONã?§å®šç¾©ã?•れã?¦ã?„れã?°ã€?行を削除ã?§ã??ã?¾ã?›ã‚“。

親�表�ら行を削除�る�����表��影響��り��。親表�削除�より影響を��る����表を�親表�削除�関係��る�����。削除�より�れら�表�行�対��次�よ��影響�����。
  • ã‚‚ã?—削除ã?®è¦?則ã?ŒRESTRICTã?‚ã‚‹ã?„ã?¯NO ACTIONã?§ã?‚れã?°ã€?ä¾?存表ã?¯å‡¦ç?†ã?«é–¢é€£ã?—ã?¾ã?™ã?Œã€?処ç?†ã?®å½±éŸ¿ã?¯å?—ã?‘ã?¾ã?›ã‚“。(ã?¤ã?¾ã‚ŠDerbyã?¯è¡¨ã?®å€¤ã‚’検証ã?—ã?¾ã?™ã?Œã€?削除ã?¯ã?—ã?¾ã?›ã‚“。)
  • ã‚‚ã?—削除ã?®è¦?則ã?ŒSET NULLã?§ã?‚れã?°ã€?親表ã?®è¡Œã?Œå‰Šé™¤ã?•れã?Ÿã‚Šã€?削除ã?Œä¼?æ’­ã?•れã?Ÿå ´å?ˆã€?ä¾?存表ã?®è¡Œã?®å€¤ã?¯æ›´æ–°ã?®å¯¾è±¡ã?¨ã?ªã‚Šã?¾ã?™ã€‚
  • ã‚‚ã?—削除ã?®è¦?則ã?ŒCASCADEã?§ã?‚れã?°ã€?親表ã?«ã?¦å‰Šé™¤ã?Œè¡Œã‚?れã?Ÿå ´å?ˆã€?ä¾?存表ã?®è¡Œã‚‚削除ã?•れã?¾ã?™ã€‚
  • ã‚‚ã?—ä¾?存表ã?Œè¦ªè¡¨ã?§ã‚‚ã?‚ã‚‹å ´å?ˆã€?ã?“ã?“ã?«æ›¸ã?‹ã‚Œã?Ÿå‡¦ç?†ã?Œä»Šåº¦ã?¯ã??ã?®ä¾?存表ã?«è¡Œã‚?れã?¾ã?™ã€‚

例

-- OUT_TRAY_PKã?¨ã?„ã?†å??å‰?ã?®åˆ—レベルã?®ä¸»ã‚­ãƒ¼åˆ¶ç´„:
CREATE TABLE SAMP.OUT_TRAY
	(
	SENT TIMESTAMP,
	DESTINATION CHAR(8),
	SUBJECT CHAR(64) NOT NULL CONSTRAINT OUT_TRAY_PK PRIMARY KEY,
	NOTE_TEXT VARCHAR(3000) 
   );

-- 表レベル�主キー制約��二��列を
-- キーã?®å®šç¾©ã?«è¨˜è¿°ã?§ã??ã?¾ã?™ã€‚
CREATE TABLE SAMP.SCHED 
	(
	CLASS_CODE CHAR(7) NOT NULL, 
	DAY SMALLINT NOT NULL, 
	STARTING TIME, 
	ENDING TIME,
	PRIMARY KEY (CLASS_CODE, DAY)
	);

-- 列レベル�制約を算術�ェック����使���。
-- 表レベル�制約を従業員��税金�賞与を超���よ���る��
-- 使���。
CREATE TABLE SAMP.EMP 
	(
	EMPNO CHAR(6) NOT NULL CONSTRAINT EMP_PK PRIMARY KEY,
	FIRSTNME CHAR(12) NOT NULL,
	MIDINIT vARCHAR(12) NOT NULL,
	LASTNAME VARCHAR(15) NOT NULL,
	SALARY DECIMAL(9,2) CONSTRAINT SAL_CK CHECK (SALARY >= 10000),
	BONUS DECIMAL(9,2), 
	TAX DECIMAL(9,2),
	CONSTRAINT BONUS_CK CHECK (BONUS > TAX)
	);

-- MEAL列��切�略字���るよ���ェック制約を使���。
CREATE TABLE FLIGHTS
	(
	FLIGHT_ID CHAR(6) NOT NULL ,
	SEGMENT_NUMBER INTEGER NOT NULL ,
	ORIG_AIRPORT CHAR(3),
	DEPART_TIME TIME,
	DEST_AIRPORT CHAR(3),
	ARRIVE_TIME TIME,
	MEAL CHAR(1) CONSTRAINT MEAL_CONSTRAINT 
	CHECK (MEAL IN ('B', 'L', 'D', 'S')),
	PRIMARY KEY (FLIGHT_ID, SEGMENT_NUMBER)
	);

CREATE TABLE METROPOLITAN
	(
	HOTEL_ID INT NOT NULL CONSTRAINT HOTELS_PK PRIMARY KEY,
	HOTEL_NAME VARCHAR(40) NOT NULL,
	CITY_ID INT CONSTRAINT METRO_FK REFERENCES CITIES
	);

-- 表レベル�主キー制約�表レベル�外部キー制約を指定���
-- 表を作����。
CREATE TABLE FLTAVAIL
	(
	FLIGHT_ID CHAR(6) NOT NULL, 
	SEGMENT_NUMBER INT NOT NULL, 
	FLIGHT_DATE DATE NOT NULL, 
	ECONOMY_SEATS_TAKEN INT,
	BUSINESS_SEATS_TAKEN INT,
	FIRSTCLASS_SEATS_TAKEN INT, 
	CONSTRAINT FLTAVAIL_PK PRIMARY KEY (FLIGHT_ID, SEGMENT_NUMBER), 
	CONSTRAINT FLTS_FK
	FOREIGN KEY (FLIGHT_ID, SEGMENT_NUMBER)
	REFERENCES Flights (FLIGHT_ID, SEGMENT_NUMBER)
	);
-- 列�一�性制約を加�る。
ALTER TABLE SAMP.PROJECT 
ADD CONSTRAINT P_UC UNIQUE (PROJNAME);

-- 列レベル�外部キー制約を利用���
-- city_id列�Cities表�主キーを�照�る表を作��る。
CREATE TABLE CONDOS
	(
	CONDO_ID INT NOT NULL CONSTRAINT hotels_PK PRIMARY KEY,
	CONDO_NAME VARCHAR(40) NOT NULL,
	CITY_ID INT CONSTRAINT city_foreign_key
	REFERENCES Cities ON DELETE CASCADE ON UPDATE RESTRICT
	);

文��存追跡システム

INSERT文やUPDATE文�対象表��る全制約�影響を����。 DELETE文�一�性制約・主キー制約・外部キー制約�影響を����。 対象表��れら�制約�追加�れ�り削除�れ�り��場���れら�文�無効��り��。