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です。これは、列を意味します。同じ名前である必要はありません。同じ名前を維持することをお勧めします。これにより、クエリを記述してテーブルを結合するときに、主キーと外部キーを確認する必要がなくなり、代わりに同じ列名が関係していることがわかります。 。
いくつかのレコードを挿入して、外部キー制約がどのように機能するかを見てみましょう。
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を挿入しているため、両方のレコードが正常に挿入されます。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の外部キー制約