sql >> Database >  >> RDS >> Sqlserver

Hoe maak je een tabel met een externe sleutelbeperking in SQL Server - SQL Server / TSQL-zelfstudie, deel 66

Wat is een externe sleutel in de SQL Server-tabel:

Foreign Key in een tabel is een kolom of groep kolommen die een koppeling vormt tussen gegevens in twee tabellen. De refererende sleutel in een tabel verwijst naar de primaire sleutel in een andere tabel.
Laten we een dbo.Customer-tabel maken met een primaire sleutel door onderstaande DDL-instructie te gebruiken
USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT PRIMARY KEY
    ,FName VARCHAR(100)
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10)
    )
 Zoals je kunt zien is Customerid de primaire sleutel in dbo.Klantentabel.
Omdat we klaar zijn met onze eerste tabel en de primaire sleutel hebben, zijn we klaar om een ​​tweede tabel te maken met buitenlandse sleutelbeperking.
CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT
    ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId)
    )
 
 
 U kunt zien dat we de kolom Customer_id hebben toegevoegd aan de tabel dbo.Orders die verwijst naar Customerid in dbo.Customer Table.
De primaire sleutel in de eerste tabel is Customerid en Foreign Key Column in de tweede tabel is Customer_id, dat wil zeggen de kolommen hoeven niet dezelfde namen te hebben. Het is een goed idee om dezelfde naam te behouden, zodat wanneer u query's schrijft en de tabellen samenvoegt, u niet hoeft te kijken wat de primaire sleutel is en welke de externe sleutel is, in plaats daarvan zou u weten dat dezelfde kolomnamen een relatie hebben .
Laten we een paar records invoegen en kijken hoe Foreign Key Constraint werkt.
    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 records worden prima ingevoegd, aangezien we hetzelfde klant-ID invoegen in dbo.Orders die wel bestaan ​​in dbo.Customer.
Als we zullen proberen een waarde in te voegen in dbo.Orders die niet aanwezig is in dbo.Customer (CustomerId), het zal door een fout als gevolg van externe sleutelbeperking.
 insert into dbo.Orders
    (OrderItemName,OrderItemAmt,Customer_Id)
    values ('TV',1,2)

Als we bovenstaande query uitvoeren, is er een fout opgetreden omdat we geen 2 hebben als klant-id in dbo.Klanttabel.
Msg 547, niveau 16, staat 0, regel 28De INSERT-instructie is in strijd met de FOREIGN KEY beperking "FK__Orders__Klant__286302EC". Het conflict deed zich voor in de database "YourDatabaseName", tabel "dbo.Customer", kolom 'Customerid'. De instructie is beëindigd.

Videodemo:wat is een beperking voor een externe sleutel en hoe maak je deze aan Foreign Key-beperking in SQL


  1. Kan ik een enkele tabel herstellen vanuit een volledig mysql mysqldump-bestand?

  2. Rijprestaties voor PostgreSQL met HAProxy

  3. Hoe kunt u de actieve gebruikers via SQL verbinden met een postgreSQL-database?

  4. Hoe SQL-injectie-aanvallen te voorkomen door Secure