問題:
データベース内のテーブルの外部キーを作成したい。
例:
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です。 。制約名を指定しない場合、データベースはデフォルトの制約名を生成します(データベースによって異なります)。