SQL Serverテーブルの外部キーとは:
テーブルの外部キーは、2つのテーブルのデータ間のリンクを提供する列または列のグループです。テーブル内の外部キーは、別のテーブル内の主キーを指します。以下のDDLステートメントを使用して、主キーを使用してdbo.Customerテーブルを作成しましょう。
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )Customeridがdbo.CustomerTableの主キーであることがわかります。
最初のテーブルの準備ができており、主キーがあるので、外部キー制約を使用して2番目のテーブルを作成します。
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId) )dbo.CustomerテーブルのCustomeridを参照するCustomer_id列をdbo.Ordersテーブルに追加したことがわかります。
最初のテーブルの主キーはCustomeridで、2番目のテーブルの外部キー列はCustomer_idです。これは、列を意味します。同じ名前である必要はありません。同じ名前を維持することをお勧めします。これにより、クエリを記述してテーブルを結合するときに、主キーと外部キーを確認する必要がなくなり、代わりに同じ列名が関係していることがわかります。 。
いくつかのレコードを挿入して、外部キー制約がどのように機能するかを見てみましょう。
dbo.Customerに存在するdbo.Ordersに同じcustomeridを挿入しているため、両方のレコードが正常に挿入されます。insert into dbo.Customer (CustomerId,FName, LName,SSN) values (1,'Aamir','Shahzad','000-000-00') insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,1)
dbo.Customerに存在しない値をdbo.Ordersに挿入しようとすると(CustomerId)、外部キー制約によるエラーが発生します。
insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,2)
上記のクエリを実行すると、dbo.CustomerテーブルにCustomeridとして2がないため、エラーが発生します。
メッセージ547、レベル16、状態0、行28INSERTステートメントがFOREIGNKEYと競合しました制約「FK__Orders__Customer__286302EC」。データベース"YourDatabaseName"、テーブル "dbo.Customer"、列'Customerid'で競合が発生しました。ステートメントは終了しました。
ビデオデモ:外部キー制約とは何ですか。 SQLの外部キー制約