SQL Server FOREIGN KEY
samenvatting: In deze tutorial leert u hoe u de foreign key constraint van SQL Server kunt gebruiken om een koppeling tussen de gegevens in twee tabellen af te dwingen.
Inleiding tot de SQL Server foreign key constraint
beschouw de volgende vendor_groups
en vendors
tabellen:
elke leverancier behoort tot een leveranciersgroep en elke leveranciersgroep kan nul of meer leveranciers hebben. De relatie tussen de tabellen vendor_groups
en vendors
is één-op-veel.,
voor elke rij in de vendors
tabel, kunt u altijd een overeenkomstige rij vinden in de vendor_groups
tabel.
met de huidige tabellen kunt u echter een Rij invoegen in de vendors
tabel zonder een overeenkomstige rij in de vendor_groups
tabel. Evenzo kunt u ook een rij in de vendor_groups
tabel verwijderen zonder de bijbehorende rijen in de vendors
tabel bij te werken of te verwijderen die resulteert in verweesde rijen in de vendors
tabel.,
om de koppeling tussen gegevens in de tabellen vendor_groups
en vendors
af te dwingen, moet u een vreemde sleutel in de tabel vendors
instellen.
een vreemde sleutel is een kolom of een groep van kolommen in een tabel die een rij van een andere tabel uniek identificeert (of dezelfde tabel in het geval van zelfreferentie).
om een vreemde sleutel aan te maken, gebruikt u de FOREIGN KEY
beperking.,
de volgende statements laten de vendors
tabel vallen en maken deze opnieuw aan met een FOREIGN KEY
beperking:
De vendor_groups
tabel wordt nu de bovenliggende tabel genoemd die de tabel is waarnaar de FOREIGN key constraint verwijst. Devendors
tabel wordt de onderliggende tabel genoemd die de tabel is waarop de FOREIGN key constraint wordt toegepast.,
In het overzicht hierboven, de volgende component wordt een FOREIGN KEY
beperking met de naam fk_group
tussen de group_id
in de vendors
tabel group_id
in de vendor_groups
tabel:
SQL Server FOREIGN KEY constraint syntaxis
De algemene syntaxis voor het maken van een FOREIGN KEY
beperking is als volgt:
Laten we eens kijken naar deze syntaxis in detail.,
geef eerst deFOREIGN KEY
constraint name op na hetCONSTRAINT
sleutelwoord. De constraint naam is optioneel daarom is het mogelijk om een FOREIGN KEY
constraint als volgt te definiëren:
In dit geval zal SQL Server automatisch een naam genereren voor de FOREIGN KEY
constraint.
ten tweede, Specificeer een lijst van door komma ‘ s gescheiden buitenlandse sleutelkolommen tussen haakjes na het FOREIGN KEY
sleutelwoord.,
ten derde, specificeer de naam van de bovenliggende tabel waarnaar de buitenlandse sleutel verwijst en een lijst van door komma ‘ s gescheiden kolommen die een link heeft met de kolom in de onderliggende tabel.
SQL Server FOREIGN KEY constraint example
eerste, voeg enkele rijen in de vendor_groups
tabel:
tweede, voeg een nieuwe leverancier met een leveranciersgroep in de vendors
tabel:
Code language: SQL (Structured Query Language) (sql)
het statement werkte zoals verwacht.,
ten derde, probeer een nieuwe leverancier in te voegen waarvan de leveranciersgroep niet bestaat in de vendor_groups
tabel:
Code language: SQL (Structured Query Language) (sql)
SQL Server gaf de volgende fout:
in dit voorbeeld, vanwege de FOREIGN KEY
beperking, heeft SQL Server de insert geweigerd en een fout gegeven.
referentiële acties
De foreign key constraint zorgt voor referentiële integriteit. Dit betekent dat u alleen een rij in de onderliggende tabel kunt invoegen als er een overeenkomstige rij in de bovenliggende tabel staat.,
Bovendien kunt u met de FOREIGN key constraint de referentiële acties definiëren wanneer de rij in de bovenliggende tabel wordt bijgewerkt of verwijderd als volgt:
de ON UPDATE
en ON DELETE
geef aan welke actie wordt uitgevoerd wanneer een rij in de bovenliggende tabel wordt bijgewerkt en verwijderd., De volgende zijn toegestaan handelingen uit : NO ACTION
, CASCADE
, SET NULL
, en SET DEFAULT
Delete-acties van de rijen in de bovenliggende tabel
Als u één of meer rijen in de bovenliggende tabel, u kunt een van de volgende acties uit:
-
ON DELETE NO ACTION
: SQL Server genereert een fout, en rollen terug de delete-actie op de rij in de bovenliggende tabel. -
ON DELETE CASCADE
: SQL Server verwijdert de rijen in de onderliggende tabel die overeenkomen met de rij verwijderd uit de bovenliggende tabel., -
ON DELETE SET NULL
: SQL Server stelt de rijen in de dochtertabel in opNULL
als de corresponderende rijen in de bovenliggende tabel worden verwijderd. Om deze actie uit te voeren, moeten de buitenlandse sleutelkolommen nietig zijn. -
ON DELETE SET DEFAULT
SQL Server stelt de rijen in de dochtertabel in op hun standaardwaarden als de corresponderende rijen in de bovenliggende tabel worden verwijderd. Om deze actie uit te voeren, moeten de buitenlandse sleutelkolommen standaarddefinities hebben. Merk op dat een nullasbare kolom een standaardwaarde heeft vanNULL
als er geen standaardwaarde is opgegeven.,
standaard past SQL ServerON DELETE NO ACTION
toe als u geen actie expliciet opgeeft.
actie Bijwerken van rijen in de bovenliggende tabel
Als u een of meer rijen in de bovenliggende tabel bijwerkt, kunt u een van de volgende acties instellen:
-
ON UPDATE NO ACTION
: SQL Server geeft een fout op en rolt de actie Bijwerken op de rij in de bovenliggende tabel terug. -
ON UPDATE CASCADE
: SQL Server werkt de corresponderende rijen in de onderliggende tabel bij wanneer de rijen in de bovenliggende tabel worden bijgewerkt., -
ON UPDATE SET NULL
: SQL Server stelt de rijen in de dochtertabel in opNULL
wanneer de corresponderende rij in de bovenliggende tabel wordt bijgewerkt. Merk op dat de foreign key columns niet uitvoerbaar moeten zijn om deze actie uit te voeren. -
ON UPDATE SET DEFAULT
: SQL Server stelt de standaardwaarden in voor de rijen in de onderliggende tabel waarvan de corresponderende rijen in de bovenliggende tabel zijn bijgewerkt.