問題:
データベース内のテーブルの外部キーを作成したい。
例:
student
id
を参照する外部キーが含まれています テーブルの列city
。
ソリューション1(新しいテーブル):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT FOREIGN KEY REFERENCES city(id) );
ディスカッション:
別のテーブルを参照する外部キー列を含む新しいテーブルを作成するには、キーワードFOREIGN KEY REFERENCES
を使用します。 その列の定義の最後にあります。その後に、参照されるテーブルの名前と括弧で囲まれた参照される列の名前を続けます。
この例では、テーブルstudent
CREATE TABLE
を使用する 句。列の名前をリストし、それぞれのデータ型を括弧で囲みます。列city_id
はこのテーブルの外部キーであり、列id
に格納されているIDの値を示します。 テーブル内city
。 FOREIGN KEY REFERENCES
を記述します この列の定義の最後に、参照されているテーブルと列を続けます:city(id)
。
1つのテーブルに複数の外部キーを作成できることに注意してください。
ソリューション2(新しいテーブル):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) );
ディスカッション:
テーブルの作成中に外部キーを定義する別の方法は、FOREIGN KEY REFERENCES
を使用することです。 列定義の最後にある句。この場合、FOREIGN KEY
の後 節では、外部キー列を指定します。次はREFERENCES
です 参照されるテーブルと列の名前とともに句。
以下に示すように、複数の列に外部キーを作成できます。
ソリューション3(新しいテーブル):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) );
この例では、制約fk_student_score_subject_id
score_id
の2つの列で構成される外部キーです。 およびsubject_id
。これらの2つの外部キー列は、テーブルscore_subject
– score_id
およびsubject_id
。
別の例を次に示します。
ソリューション4(新しいテーブル):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id) );
ディスカッション:
このコードには、再びCONSTRAINT
があります。 この制約の名前を持つ句。読みやすく、理解しやすい名前を使用してください。この例では、fk_student_city_id
という名前を使用します。 、関連するテーブルと列を示します。次に、FOREIGN KEY
を記述します。 そして、外部キーとなる列の名前を(括弧内に)追加します。次に、REFERENCES
があります 句の後に参照されるテーブルと列の名前が続きます(ここでは、id
。
ソリューション5(既存のテーブル):
ALTER TABLE student ADD FOREIGN KEY (city_id) REFERENCES city(id);
ディスカッション:
既存のテーブルに新しい外部キーを追加することもできます。ここで、テーブルはALTER TABLE
を使用して変更されます 句。テーブル名(この例では、student
)はALTER TABLE
の後に配置されます キーワード。次に、ADD FOREIGN KEY
句の後には、外部キーとして使用される列の名前が続きます。次に、REFERENCES clause
があります。 参照されるテーブルの名前と括弧内の主キー列の名前。
このコマンドを実行する前に、変更するテーブルが存在している必要があることに注意してください。
ソリューション6(既存のテーブル、外部キー制約):
ALTER TABLE student ADD CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id)
ディスカッション:
既存のテーブルの制約として外部キー列に名前を付ける場合は、このようなクエリを使用します。ここで、外部キー制約の名前はfk_student_city_id
です。 。制約名を指定しない場合、データベースはデフォルトの制約名を生成します(データベースによって異なります)。