- 外部キー
-効果:ワードがデータ・テーブルに挿入されたときは、自動的に付与された親テーブルに存在しない
-コンセプト:テーブルを必要としているフィールドの値が別のテーブルのフィールドに依存するとき、外部の使用キー。前記従属表は、アクティブな単語リスト、親テーブルとして従属テーブルと呼ばれています。外部キーは、単語リストに追加しました。
- 使用:
-あなたは、テーブルのフィールドを作成した後: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から削除する; -クエリの学生は 、学生から*選択します。