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

SQLServerで外部キー制約のあるテーブルを作成する方法-SQLServer/TSQLチュートリアルパート66

    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の外部キー制約


    1. Oracle FORLOOPREVERSEの例

    2. Oracle:JMSメッセージを送信するJavaストアドプロシージャ

    3. ブール値の格納に使用するMySQLデータ型

    4. SQLServerテーブルの列のIDプロパティを削除する方法-SQLServer/T-SQLチュートリアル44