sql >> データベース >  >> RDS >> Database

SQL外部キー

    この記事では、FOREIGN KEY制約と、2つのテーブル間の関係を構築するためのFOREIGNKEY制約を定義する方法について学習します。

    リレーショナルデータベース管理システム(RDBMS)では、外部キーは、2つのテーブル間の関係を構築したり、2つのテーブルを結合したりするために使用される1つまたは複数のフィールドです。

    • FOREIGN KEYは、RDBMSでは参照キーとも呼ばれます
    • 2つのテーブル間のFOREIGNKEY制約を使用して、2つのテーブル間の親子関係を定義します。
    • このフィールドは、親テーブルと呼ばれるテーブルのPRIMARY KEY制約を定義し、同じフィールドは、子テーブルと呼ばれる別のテーブルのFOREIGNKEY制約を定義します。
    • テーブルには主キーを1つだけ含めることができますが、外部キーに定義された制限はありません。テーブルに1つまたは複数の外部キーを置くことができます。
    • テーブルの作成中にFOREIGNKEY制約を定義したり、既存のテーブルにFOREIGNKEY制約を定義したりできます。

    例を見て、外部キーの制約を理解して学習しましょう。

    例:

    ここでは、2つのテーブルがあります。1つはCourseテーブルで、もう1つはStudentテーブルです。

    学生はコースを選択します。次のFOREIGNKEY制約の例は、1つのフィールドで定義されています。

    テーブルナンバーワン:学生テーブル

    Student_Id First_Name Last_Name Email_Id 都市
    101 カリーナ Sayyed [email protected] ハイデラバード
    102 Anmol テマニ [email protected] ジャルガウン
    103 ハーシャル パテル [email protected] ムンバイ
    104 サクシ フード [email protected] プネ
    105 Suresh コーリ [email protected] ハイデラバード

    表2:コース表

    Course_Id Course_Name Student_Id
    C101 Java 101
    C102 SQL 102
    C103 SOA ヌル
    C104 SAP 104
    C105 MuleSoft 103
    C101 Java 105

    Studentテーブルでは、Student_IdフィールドはPRIMARY KEYであり、CourseテーブルではStudent_IdはFOREIGNKEYです。

    FOREIGN KEY 制約は、無効なデータが親テーブルに含まれる値の1つである必要があるため、外部キー列に挿入されるのを防ぎます。

    CREATETABLEでの外部キー制約の定義

    次の例では、コーステーブルに外部キーを定義しています。

    まず、次のフィールドを使用してStudentテーブルを作成しました。

    CREATE TABLE Student( Student_Id int NOT NULL, First_Name varchar(40) NOT NULL, Last_Name varchar(40) NOT NULL, Email_Id varchar(50),  City varchar(20) NOT NULL, PRIMARY KEY(Student_Id));

    次の例は、他のテーブルでFOREIGNKEY制約を定義する方法を示しています。

    テーブル名コース:

    CREATE TABLE Course( Course_Id int NOT NULL, Course_Name varchar(40) NOT NULL, Student_Id int, FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id));

    コーステーブルでは、主キーを定義していません。 Student_IdにFOREIGNKEY制約を定義するだけです。

    次のFOREIGNKEY制約の例は、複数のフィールドで定義されています。

    3つのテーブルがあり、1つはPackageテーブル、2つ目はDataテーブル、3つ目はTalk_timeテーブルであるとします。

    表1:パッケージ:

    Package_Id Data_Id Talktime_Id
    P1001 D1003 T1001
    P1002 D1001 T1002
    P1003 D1002 T1003
    P1004 D1003 T1004
    P1005 D1004 T1005

    表2:データ:

    Data_Id Data_Limit Data_Price
    D1001 5 120
    D1002 3 75
    D1003 6 150
    D1004 10 240
    D1005 15 320

    表3:Talk_Time:

    Talk_Time_Id Talk_Time _Limit Talk_Time _Price
    T1001 120 130
    T1002 70 105
    T1003 60 90
    T1004 200 220
    T1005 150 170

    Talk_Timeテーブルでは、Talk_Time_Idが主キーです。

    データテーブルでは、Data_Idが主キーです。

    一方、Packageテーブルでは、Talk_Time_IdとData_IdはFOREIGNキーです

    表1:データ:

    CREATE TABLE Data(Data_Id varchar(5) NOT NULL, Data_Limit int, Data_Price int, PRIMARY KEY(Data_Id));

    表2:Talk_Time:

    CREATE TABLE Talk_Time(Talk_Time_Id varchar(5) NOT NULL, Talk_Time_Limit int, Talk_Time_Price int , PRIMARY KEY(Talk_Time_Id));

    表番号3:パッケージ:

    CREATE TABLE Package(Package_Id varchar(5) NOT NULL, Data_Id varchar(5), Talk_Time_Id varchar(5), FOREIGN KEY(Data_Id) REFERENCES Data(Data_Id), FOREIGN KEY(Talk_Time_Id) REFERENCES Talk_Time(Talk_Time_Id));

    ALTER TABLEを使用した外部キ​​ー制約:

    すでにテーブルを作成していて、フィールドにFOREIGNKEY制約を定義したいとします。このような場合は、ALTERTABLEクエリを使用してFOREIGNKEY制約を追加します。

    次のクエリは、Student_IdフィールドにFOREIGNKEY制約を追加するために使用されます。

    ALTER TABLE Course ADD FOREIGN KEY(Student_Id) REFERENCES Student(Student_Id);

    ADDキーワードは、テーブル名の後に使用され、既存のテーブルにFOREIGNKEY制約を追加します。

    テーブルから外部キー制約を削除

    次のクエリを使用して、テーブルからFOREIGNKEY制約を削除します。

    ALTER TABLE Course DROP FOREIGN KEY course_ibfk_1;

    Dropキーワードは、Student_IdフィールドからFOREIGNKEY制約を削除するために使用されます。

    course_ibfk_1は外部キー制約名です。

    FOREIGNKEY制約フィールドにnull値を含めることができます。 FOREIGNKEY制約フィールドに重複する値を含めることができます。


    1. MySQLで日時またはタイムスタンプのデータ型を使用する必要がありますか?

    2. django ORMを使用して、外部キーフィールドで2つのテーブルをどのように結合しますか?

    3. RDLCLocalReportのExcelへのエクスポートが非常に遅い

    4. OracleシャットダウンエラーORA-01033