Articles

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 op NULL 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 van NULL 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 op NULL 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.