19外部キー制約

- 外部キー

-効果:ワードがデータ・テーブルに挿入されたときは、自動的に付与された親テーブルに存在しない
-コンセプト:テーブルを必要としているフィールドの値が別のテーブルのフィールドに依存するとき、外部の使用キー。前記従属表は、アクティブな単語リスト、親テーブルとして従属テーブルと呼ばれています。外部キーは、単語リストに追加しました。

- 使用:

-あなたは、テーブルのフィールドを作成した後:CNO数(10)参照親テーブル(親テーブルのフィールド名)
- :制約fk_テーブル_列名、外部キー(フィールド名)参照親テーブル名ファイナルテーブル作成中に(親テーブルのフィールド名)
-表が完成し作成された後に追加:ALTER TABLEテーブル名の追加制約fk_テーブルを_列名、外部キー(フィールド名)の参照親テーブル(親テーブルのフィールド名)

- 短所:

- 子テーブルが親テーブルに完成したレコードをクリアされない場合は、あなたが削除をカスケード使用しない限り、削除することはできません

Wordの表レコードが見つかりました:エラー - ; CNO = 1がどこclazzから削除

- ソリューション:

- DELETE CASCADEを利用:、親テーブルのデータを削除自動的にすべてのレコードを削除従属フィールドやテーブルおよび関連子テーブルにこのフィールドを設定すると、空になったとき

  • - Wordの表が作成されます。ON DELETE CASCADEをCNO数(10)参照のclazz(CNO)に関連する単語テーブル表レコードレコードを削除します親を削除
  • - あなたは、子テーブルを作成する場合:削除、設定されたヌルでCNO数(10)参照のclazz(CNO)がその親テーブルのレコード、レコードはnullに設定されます関連する関連語テーブルのフィールドを削除すると、単語のテーブルのレコード自体は削除されません
    •   -注:Wordの表は、そうでない場合は、削除、設定されたヌルで無効、従属フィールドが空で設定することはできません 

例:

 

表学生(作成し
たSnO数(10)主キー、
SNAME VARCHAR2(10)NOT NULL、
SAGE番号(3)チェック(SAGE> 0およびSAGE <150)、
SSExはchar(4)チェック(SSEx = 'M'またはssexを= '女性')、
sfav VARCHAR2(500)、
SQQ VARCHAR2(30)UNIQUE、。
CNOナンバー(10) 
-クエリ
学生からSELECT *; 
clazzからSELECT *; 
-学生のテストデータ追加
学生値にインサート(1 、 'ジョン・ドウ001'、18、 'M'、 '歌'、 '112 414 545' ,. 1); 
INSERT INTO学生値(2、 'ジョン・ドウ002'、18、 'M'、 '歌'、 '112414546' 、1);。
。INSERT INTO学生値(3、 'ジョン・ドウ001'、18、 'M'、 '歌'、 '112 414 547'、2); 
INSERT INTO学生値(4、 'ジョン・ドウ002'、18 '。男性「」歌'' 112414548」、2); 
-クラステーブルを作成する
(表clazzを作成します 
)番号(10 CNO主キー 
CNAME VARCHAR2(100)NOT NULL、
VARCHAR2 cdesc(300) 
-クラステストデータ追加
clazz値(1、 '内に挿入するJava クラスの高賃金の仕事、') ''驚くべき; 
INSERT INTO clazz値は(2、「Pythonの雇用クラス」、「本当に激しい」); 
-共同問い合わせ:学生とクラス情報
SELECT *からの学生が
参加clazz 
ON student.cno = clazz.cno; 
-問題を見つける:あなたが挿入することができます学生が、学生のクラスが存在しないクラスで
生徒の値に挿入(5「王」、19、「M」、「バスケットボール」、213123,3); 
-ソリューション:テーブルの学生を作成します、CNO(クラス番号)別のテーブルの主キーとして設定されている場合、この動作は外部キーと呼ばれ
  、元学生のテーブルには、削除する- 
表の学生をドロップ; 
  -学生外部キーテーブルの新しいセットを作成し、上記の文の実装、その後、実行するために学生を追加
(表学生を作成し
たSnO数(10)主キーを、
SNAME VARCHAR2(10)NOT NULL、
SAGE番号(3)チェック(SAGE> 0およびSAGE <150)、
SSExチャー(4)チェック(SSEx = 'M'又はssex = 'F')、
sfav VARCHAR2(500)、
SQQ。VARCHAR2(30)UNIQUE、
CNO数(10)参照のclazz(CNO ) - または(フィールド)を参照する最終鍵外国内の別のテーブル(フィールド名)
-外部キーコンセプト
  -効果:親テーブル内のデータ・ワード・テーブルに挿入され存在しない、それが自動的に与えられている
  -コンセプト:テーブルを必要としているフィールドの値が別のテーブル、外部キー内のフィールドに依存するとき。
    -前記従属テーブルは、親テーブルとして依存テーブル、アクティブワードリストと呼ばれています。テーブルに外部キー単語を追加します
  : -使用し
    たテーブルを作成するときに、フィールドを:CNO数(10)参照親テーブル(親テーブルのフィールド名は) - 
    -最後にテーブルを作成します。制約fk_テーブル名フィールド_外部キー(フィールド名)の参照を親テーブルに名前を付ける(親テーブルのフィールド名)
    -表が完成し作成された後に追加:ALTER TABLEテーブル名の追加制約fk_テーブルを_列名、外部キー(フィールド名)参照親テーブル名(親テーブルのフィールド名)
  -欠点は:
    -あなたが削除をカスケード使用しない限り、親テーブルの子テーブルがクリアされない完成レコードは、削除することはできません
    。WHERE CNO =削除からclazz 1; 
    -カスケード削除:親テーブルのデータを削除する際に、自動的にこのフィールド内のすべてのレコードと関連するサブテーブルの削除
      -外部キーの道の後ろに提供し、削除カスケードの単語テーブルを作成するために追加されます。 Wordの表が作成されたとき:番号CNO(10)DELETE CASCADE ON [参照clazz(CNO)
                           -最初に追加する制約元削除
                            の注文により、TABLE_NAMEのUSER_CONS_COLUMNSからSELECT *を; 
                            ALTERテーブルの学生は、制約SYS_C007041をドロップ; 
    ALTER表は留学生fk_student_cno制約を追加します。キー(CNO)DELETE CASCADE ON [参照clazz(CNOは); 
                            -正常に削除され、私たちは、親テーブルのレコードを削除しようとする
    から削除WHERE clazz CNO = 1; 
    -クエリ:関連自身も記録が削除され
    、学生から選択*を。
    SELECT * FROM clazz; 
     -欠点:あなたは、親テーブルのレコードを削除するとWordの表に関連するレコードを削除します上記の方法を使用して
      -あなたは、外部キーの設定で子テーブルを作成するソリューションは、削除、レコード、レコードはnullに設定されます関連する関連語テーブルのフィールドに、削除、設定されたヌルに後でそのとき親テーブルを追加して、レコード自体は削除されません
       -注意を:Wordの表は、従属フィールドが削除設定はnullにそれ以外の場合は無効、非空で設定することはできません
          -オリジナルの制約を削除するために 
INSERT INTO学生値(3、 'ジョン・ドウ001'、18、 'M'。 '歌'、 '112414547'、2)。 
          ; ALTER TABLE学生は制約がfk_student_cnoドロップ
          、削除、設定されたヌル制約にキーワードを追加-
                       -削除の学生:学生からの削除、
          学生から削除; 
                       -追加の制約
    ALTER表学生の追加外部キー(CNO)SET NULLの削除に関する参考文献のclazz(CNO)fk_student_cno制約; 
                       -追加クラス
                       の追加の学生- 
学生の値への挿入(1、 'ジョン・ドウ001'、18、 'M'、 '歌'、 '112 414 545'、1); 
INSERT INTO学生値(2、 'ジョン・ドウ002'、18、 'M'、 '歌' ' 112 414 546 '1);
;学生の値(4、 'ジョン・ドウ002'、18、 'M'、 '歌'、 '112 414 548'、2)への挿入
            削除を記録しclazz - 
            clazzから削除する; 
            -クエリの学生は
            、学生から*選択します。
   

 

  

 

おすすめ

転載: www.cnblogs.com/Scorpicat/p/12306745.html