Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erstellen Sie eine Tabelle mit Fremdschlüsseleinschränkung in SQL Server - SQL Server / TSQL-Tutorial Teil 66

Was ist ein Fremdschlüssel in der SQL Server-Tabelle:

Fremdschlüssel in einer Tabelle ist eine Spalte oder eine Gruppe von Spalten, die eine Verbindung zwischen Daten in zwei Tabellen herstellt. Der Fremdschlüssel in einer Tabelle zeigt auf den Primärschlüssel in einer anderen Tabelle.
Lassen Sie uns eine dbo.Customer-Tabelle mit Primärschlüssel erstellen, indem Sie die folgende DDL-Anweisung verwenden
USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT PRIMARY KEY
    ,FName VARCHAR(100)
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10)
    )
 Wie Sie sehen können, ist Customerid der Primärschlüssel in dbo.Customer Table.
Da wir mit unserer ersten Tabelle fertig sind und den Primärschlüssel haben, können wir loslegen und eine zweite Tabelle mit Foreign Key Constraint erstellen.
/>
CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId)
    )
 
 
 Sie können sehen, dass wir die Spalte Customer_id in der Tabelle dbo.Orders hinzugefügt haben, die auf Customerid in der Tabelle dbo.Customer verweist.
Der Primärschlüssel in der ersten Tabelle ist Customerid und die Fremdschlüsselspalte in der zweiten Tabelle ist Customer_id, das heißt die Spalten müssen nicht die gleichen Namen haben. Es ist eine gute Idee, den gleichen Namen beizubehalten, damit Sie beim Schreiben von Abfragen und Verbinden der Tabellen nicht nachsehen müssen, welcher Primärschlüssel und welcher Fremdschlüssel ist, sondern Sie wissen, dass die gleichen Spaltennamen in Beziehung stehen .
Lassen Sie uns ein paar Datensätze einfügen und sehen, wie Foreign Key Constraint funktioniert.
    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)
 
 Beide Datensätze werden problemlos eingefügt, da wir dieselbe Kunden-ID in dbo.Orders einfügen, die in dbo.Customer vorhanden ist.
Wenn wir versuchen, einen Wert in dbo.Orders einzufügen, der nicht in dbo.Customer vorhanden ist (CustomerId), Es wird ein Fehler aufgrund einer Fremdschlüsseleinschränkung auftreten.
 insert into dbo.Orders
    (OrderItemName,OrderItemAmt,Customer_Id)
    values ('TV',1,2)

Wenn wir die obige Abfrage ausführen, tritt ein Fehler auf, da wir keine 2 als Customerid in der dbo.Customer-Tabelle haben.
Msg 547, Ebene 16, Status 0, Zeile 28Die INSERT-Anweisung stand im Konflikt mit dem FOREIGN KEY Einschränkung "FK__Bestellungen__Kunde__286302EC". Der Konflikt ist in der Datenbank „YourDatabaseName“, Tabelle „dbo.Customer“, Spalte „Customerid“ aufgetreten. Die Anweisung wurde beendet.

Videodemo:Was ist eine Fremdschlüsselbeschränkung und wie wird sie erstellt? Fremdschlüsseleinschränkung in SQL