参照整合性制約は、次のようにも呼ばれます。 外部キー制約 。外部キーは、値が別のテーブルの主キーから導出されるキーです。
値の導出元となるテーブルは次のように呼ばれます。 マスターまたは参照先 テーブルと、それに応じて値が挿入されるテーブルは、 子または参照 テーブル、つまり、 外部キー と呼ばれています 子テーブル 、およびそれを含むテーブル 主キー/候補キー と呼ばれています 参照テーブルまたは親テーブル 。データベース リレーショナル モデルについて話すとき、候補キーは 0 個以上の属性を持つことができる属性のセットとして定義できます。
マスター テーブルまたは参照テーブルの構文は次のとおりです。
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
ここで、列 Roll は次のように機能します。 主キー、 これは、子テーブルの外部キーの値を導出するのに役立ちます。
子テーブルまたは参照テーブルの構文は次のとおりです。
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
上の表では、列 Roll は次のように機能します。 外部キー、 その値は、マスター テーブルの主キーのロール値を使用して導出されます。
外部キー制約または参照整合性制約。
参照整合性制約には次の 2 つがあります。
挿入制約: 値が MASTER テーブルにない場合、値を CHILD テーブルに挿入することはできません
Javaの部分文字列
制約の削除: 値が CHILD テーブルにある場合、値を MASTER テーブルから削除することはできません
SUBJECT テーブルの列の他の値とともに Roll = 05 を挿入すると、すぐにエラーが表示されます。 外部キー制約違反 ' つまり、次のように挿入コマンドを実行します。
SUBJECT 値 (5、786、OS) に挿入します。挿入制約により SQL は処理されません (値がマスターテーブルにない場合、子テーブルに値を挿入することはできません。マスターテーブルには Roll = 5 が存在しないため、子テーブルに Roll = 5 を入力することはできません)
同様に、ROLL = 4 を STUDENT テーブルから削除したい場合は、すぐにエラーが表示されます。 外部キー制約違反 ' つまり、次のように削除コマンドを実行します。
Roll = 4 の STUDENT から削除します。削除制約のため、SQL では処理されません。 ( 値が子テーブルにある場合、マスター テーブルから値を削除することはできません。子テーブルには Roll = 5 が存在するため、マスター テーブルから Roll = 5 を削除することはできません。なんとか Roll = 5 を削除できましたが、その後 Roll = 5 が子テーブルで利用可能になり、最終的には挿入制約に違反します)。
カスケード削除時。
削除制約に従って: 値が CHILD テーブルにある場合、値を MASTER テーブルから削除することはできません。次の質問は、値が子テーブルにある場合、削除制約に違反せずにマスター テーブルから値を削除できるかということです。つまり、マスターテーブルから値を削除すると、それに対応する値も子テーブルから削除されるはずです。
ユーザー名の元
上記の質問に対する答えは「はい」です。値が子テーブルにある場合、削除制約に違反することなくマスター テーブルから値を削除できます。子テーブルの作成時にわずかな変更を行う必要があります。つまり、追加する必要があります。 カスケード削除時 。
テーブルの構文
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
上記の構文では、references キーワード (外部キーの作成に使用) の直後に削除カスケードを追加しました。これを追加することで、値が子テーブルにある場合、削除に違反することなくマスター テーブルから値を削除できます。制約。ここで、Roll = 5 が子テーブルにあるにもかかわらず、マスター テーブルから Roll = 5 を削除したい場合、マスター テーブルから Roll = 5 を削除するコマンドを与えた瞬間に、Roll = を持つ行が削除されるため、それが可能になります。子テーブルの 5 も削除されます。
それぞれ 4 つの値を持つ上記の 2 つのテーブル STUDENT および SUBJECT が表示されています。次に、SQL コマンドを記述して STUDENT( Master ) テーブルから Roll = 4 を削除しようとしていると仮定します。 Roll = 4 の STUDENT から削除します。
SQL が上記のコマンドを実行すると、SUBJECT( Child ) テーブルの Roll = 4 を持つ行も削除されます。 学生と対象者 テーブルは次のようになります:
上記の 2 つのテーブル STUDENT と SUBJECT から、どちらのテーブルでも Roll = 4 が削除制約に違反することなく一度に削除されていることがわかります。
面接では、「外部キーに NULL 値を含めることはできますか?」という非常に重要な質問がされることがあります。
上記の質問に対する答えは「はい」です。NULL 値を持つ可能性がありますが、主キーはいかなる場合でも NULL にすることはできません。上記の質問を実際に理解するために、null の削除の概念を以下で理解しましょう。
NULL を削除します。
削除制約に従って: 値が CHILD テーブルにある場合、値を MASTER テーブルから削除することはできません。次の質問は、値が子テーブルにある場合、削除制約に違反せずにマスター テーブルから値を削除できるかということです。つまり、マスターテーブルから値を削除すると、それに対応する値も子テーブルから削除されるか、NULL 値に置き換えられる必要があります。
上記の質問に対する答えは「はい」です。値が子テーブルにある場合は、外部キーに NULL を挿入することで削除制約に違反することなく、マスター テーブルから値を削除できます。子テーブルの作成中にわずかな変更を行う必要があります。追加することで null の削除時 。
テーブル構文:
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
上記の構文では、references キーワード (外部キーの作成に使用) の直後に、delete null を追加しました。これを追加することで、値が子テーブルにある場合、削除に違反することなくマスター テーブルから値を削除できます。制約。ここで、Roll = 4 が子テーブルにあるにもかかわらず、マスター テーブルから Roll = 4 を削除したい場合、マスター テーブルから Roll = 4 を削除するコマンドを実行した瞬間に、Roll = を持つ行が削除されるため、それが可能になります。子テーブルの 4 は NULL 値に置き換えられます。
それぞれ 4 つの値を持つ上記の 2 つのテーブル STUDENT および SUBJECT が表示されています。次に、SQL コマンドを記述して STUDENT( Master ) テーブルから Roll = 4 を削除しようとしていると仮定します。 Roll = 4 の STUDENT から削除します。
SQL が上記のコマンドを実行すると、SUBJECT( Child ) テーブルの Roll = 4 を持つ行が NULL 値に置き換えられます。 学生と対象者 テーブルは次のようになります:
intからcharへ
上記の 2 つのテーブル STUDENT と SUBJECT から、テーブル STUDENT Roll = 4 が削除され、SUBJECT テーブルの Roll = 4 の値が NULL に置き換えられていることがわかります。これは、外部キーが null 値を持つことができることを証明しています。 SUBJECT テーブルの場合、列 Roll が外部キーとともに主キーである場合、その場合、NULL 値を持つ外部キーを作成できません。