SQLSHACK

0 Comments

in het vorige artikel veelgebruikte SQL Server restricties: niet NULL, unieke en primaire sleutel, beschreven we in detail de eerste drie types van de SQL Server restricties; niet NULL, unieke en primaire sleutel. In dit artikel bespreken we de andere drie beperkingen: FOREIGN KEY, CHECK en DEFAULT door ze kort te beschrijven en praktische voorbeelden te geven.,

foreign KEY Constraint

Een Foreign Key is een databasesleutel die wordt gebruikt om twee tabellen aan elkaar te koppelen. De FOREIGN KEY constraint identificeert de relaties tussen de databasetabellen door te verwijzen naar een kolom of een reeks kolommen in de onderliggende tabel die de foreign key bevat, naar de primaire sleutelkolom of een reeks kolommen in de bovenliggende tabel.

de relatie tussen de child-en de parent-tabellen wordt gehandhaafd door te controleren of de vreemde sleutelwaarden van de child-tabel aanwezig zijn in de primaire sleutel van de referentie van de parent-tabel voordat deze waarden in de child-tabel worden ingevoegd., Op deze manier zal de FOREIGN KEY constraint, in de child table die verwijst naar de primaire sleutel in de parent table, de database referentiële integriteit afdwingen. Referentiële integriteit zorgt ervoor dat de relatie tussen de databasetabellen wordt bewaard tijdens het gegevensinvoegingsproces. Bedenk dat de primaire sleutelbeperking garandeert dat er geen nul-of dubbele waarden voor de geselecteerde kolom of kolommen in die tabel worden ingevoegd, waardoor de integriteit van de entiteit voor die tabel wordt afgedwongen., De integriteit van de entiteit die wordt afgedwongen door de primaire sleutel en de referentiële integriteit die wordt afgedwongen door de buitenlandse sleutel vormen samen de integriteit van de sleutel.

De foreign KEY constraint verschilt van de PRIMARY KEY constraint in die zin dat u slechts één primaire sleutel per tabel kunt maken, met de mogelijkheid om meerdere FOREIGN KEY restricties in elke tabel te creëren door te verwijzen naar meerdere parent table. Een ander verschil is dat de buitenlandse sleutel het invoegen van NULL-waarden toestaat als er geen Niet-null-beperking is gedefinieerd op deze sleutel, maar de primaire sleutel accepteert geen NULLs.,

De foreign KEY constraint biedt u ook de mogelijkheid om te bepalen welke actie zal worden ondernomen wanneer de gerefereerde waarde in de bovenliggende tabel wordt bijgewerkt of verwijderd, met behulp van de on UPDATE en ON DELETE clausules. De ondersteunde acties die kunnen worden ondernomen bij het verwijderen of bijwerken van de waarden van de bovenliggende tabel zijn onder meer:

  • geen actie: wanneer de bijwerken of verwijderen clausules zijn ingesteld op geen actie, zal de uitgevoerde bijwerken of verwijderen operatie in de bovenliggende tabel mislukken met een fout.,
  • CASCADE: Als u de bijwerken of verwijderen clausules in CASCADE zet, zal dezelfde actie die wordt uitgevoerd op de referentiewaarden van de bovenliggende tabel worden weerspiegeld in de gerelateerde waarden in de onderliggende tabel. Als de referentiewaarde bijvoorbeeld wordt verwijderd in de bovenliggende tabel, worden ook alle gerelateerde rijen in de onderliggende tabel verwijderd.
  • SET NULL: met deze optie bij bijwerken en bij verwijderen van clausules, als de referentiewaarden in de bovenliggende tabel worden verwijderd of gewijzigd, worden alle gerelateerde waarden in de onderliggende tabel ingesteld op NULL-waarde.,
  • SET DEFAULT: met behulp van de SET DEFAULT optie van de on UPDATE and ON DELETE clausules geeft u aan dat, als de referentiewaarden in de bovenliggende tabel worden bijgewerkt of verwijderd, de gerelateerde waarden in de onderliggende tabel met buitenlandse sleutelkolommen worden ingesteld op de standaardwaarde.

u kunt de FOREIGN KEY constraint toevoegen terwijl u de kolom definieert met het CREATE TABLE T-SQL statement, of deze toevoegen na het aanmaken van de tabel met het ALTER TABLE T-SQL statement. We zullen twee nieuwe tabellen maken om de FOREIGN KEY constraint functionaliteit te begrijpen., De eerste tabel zal fungeren als de bovenliggende tabel met de ID kolom gedefinieerd als een primaire sleutel kolom. De tweede tabel zal fungeren als de dochter tabel, met de ID kolom gedefinieerd als de buitenlandse sleutel kolom die verwijst naar de id kolom op de bovenliggende tabel.,> ID INT PRIMAIRE SLEUTEL

Naam VARCHAR(50) NULL
)
GO
CREATE TABLE ConstraintDemoChild
(
CID INT PRIMAIRE SLEUTEL
ID INT VREEMDE SLEUTEL verwijst naar ConstraintDemoParent(ID)
)

Na het maken van de twee tabellen, zullen we plaats drie records naar de bovenliggende tabel, en twee records in de onderliggende tabel, met behulp van de volgende INSERT-instructies:

Het resultaat zal u tonen dat de drie records zijn met succes geplaatst in de bovenliggende tabel., Het eerste record dat we probeerden in te voegen in de dochtertabel wordt zonder fouten ingevoegd omdat de ID-waarde van 1 al bestaat in de bovenliggende tabel.,omdat de ID-waarde van 4 bestaat niet in de bovenliggende tabel en de REFERERENDE SLEUTEL beperking, u zult niet in staat zijn tot het invoegen van een ID-waarde de onderliggende tabel die niet bestaat in de bovenliggende tabel:

het Controleren van de bovenliggende en onderliggende tabellen inhoud, zult u zien dat enkel een record wordt ingevoegd in de onderliggende tabel, zoals je hieronder kunt zien:

Als we niet vermelden van de FOREIGN KEY constraint name tijdens het maken van de onderliggende tabel, SQL Server toewijzen van een unieke naam die we kunnen halen uit de INFORMATION_SCHEMA.,TABLE_CONSTRAINTS system view using the following query:

1
2
3
4
5
6
7
8

SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,onstraintDemoChild
ADD CONSTRAINT FK__ConstraintDe__ID
FOREIGN KEY (ID) VERWIJZINGEN ConstraintDemoParent(ID);

De operatie zal mislukken, als de ID-waarde van 4 niet bestaat in de bovenliggende tabel en breekt de referentiële integriteit tussen het kind en de ouders tabellen, zoals te zien is in het volgende fout bericht:

Voor het maken van de FOREIGN KEY constraint in de onderliggende tabel, hebben we te elimineren dat conflict eerst door het verwijderen of bijwerken van de record., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., SET ID =2 ID = 4

Nu is de VREEMDE SLEUTEL (foreign key constraint zal worden gemaakt, zonder enige fout, zoals hieronder weergegeven:

EEN FOREIGN KEY constraint kunnen worden gedefinieerd met behulp van de SQL Server Management Studio tool. Klik met de rechtermuisknop op de gewenste tabel en selecteer de optie ontwerp.,> In het weergegeven venster, kunt u eenvoudig aangeven van de naam van de FOREIGN KEY constraint, de tabellen en kolommen die deel gaat nemen in die relatie, door te klikken op de Tabellen En Kolommen van de Specificatie, als het controleren van de bestaande gegevens is vereist, en ten slotte de actie die wordt uitgevoerd wanneer de record waarnaar wordt verwezen is verwijderd of gewijzigd op de bovenliggende tabel, zoals hieronder weergegeven:

CHECK Constraint

EEN CHECK constraint is gedefinieerd op een kolom of een set kolommen te beperken het bereik van de waarden die kunnen worden ingevoegd in deze kolommen, met behulp van een vooraf gedefinieerde voorwaarde., De CONTROLEBEPERKING treedt in werking om de ingevoegde of gewijzigde waarden te evalueren, waarbij de waarde die aan de voorwaarde voldoet in de tabel wordt ingevoegd, anders wordt de insert-bewerking weggegooid. Het is toegestaan om meerdere CONTROLEBEPERKINGEN op te geven voor dezelfde kolom.

Defining the check constraint condition is min of meer vergelijkbaar met het schrijven van de WHERE-clausule van een query, met behulp van de verschillende vergelijkingsoperators, zoals en, of, tussen, in, LIKE En Is NULL om zijn Booleaanse expressie te schrijven die waar, onwaar of onbekend zal retourneren., De controle beperking zal onbekende waarde retourneren wanneer een NULL waarde aanwezig is in de voorwaarde. De controlebeperking wordt voornamelijk gebruikt om de domeinintegriteit af te dwingen door de ingevoegde waarden te beperken tot de waarden die de gedefinieerde waarden, het bereik of de opmaakregels volgen.

laten we een nieuwe eenvoudige tabel maken met drie kolommen; de ID-kolom die wordt beschouwd als de primaire sleutel van die tabel, naam en salaris. Een CONTROLEBEPERKING wordt gedefinieerd in de Salariskolom om ervoor te zorgen dat er geen nul-of negatieve waarden in die kolom worden ingevoegd.,v>6

7
8
9
CREATE TABLE ConstraintDemo4
(
ID INT PRIMAIRE SLEUTEL
Naam VARCHAR(50) NULL
Salaris INT CONTROLEREN (Salaris>0)
)
GO

Als u het uitvoeren van de hieronder drie INSERT statements:

Het is duidelijk uit de gegenereerde resultaat dat de eerste record is ingevoegd met geen fout als het geboden Salaris waarde aan de controle conditie.,rovided Salaris waarden niet voldoen aan de beperking CHECK aandoening te wijten aan het invoegen van nul en negatief Loon waarden, zoals u kunt zien in het volgende fout bericht:

het Controleren van de tafel van de gegevens geeft u aan dat alleen de eerste rij voorbij de CHECK-beperking voorwaarde zal worden ingevoegd in de tabel zoals hieronder:

We al eerder in dit artikel dat de CHECK-beperking maakt het plaatsen van NULL-waarden indien de meegedaan kolommen NULL toestaan, en de NULL-waarden die worden beoordeeld als ONBEKENDE gooien zonder enige fout., Dit is duidelijk uit het onderstaande record dat met succes wordt ingevoegd, hoewel de opgegeven waarde van de Salariskolom NULL is:

Als u de controle beperking definitie in het vorige CREATE TABLE statement bekijkt, zult u zien dat we de naam van de gedefinieerde beperking niet hebben genoemd. In dit geval zal SQL Server een unieke naam toewijzen aan die beperking die kan worden getoond door het INFORMATION_SCHEMA te bevragen.TABLE_CONSTRAINTS systeemweergave voor de ConstraintDemo4 tabel., Het resultaat is als volgt:

De CONTROLEBEPERKING kan worden verwijderd met behulp van de ALTER TABLE T-SQL statement.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:

1
2
3
4
5

ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);

Adding the CHECK constraint will fail., Dit is te wijten aan het feit dat, terwijl de SQL Server de reeds bestaande gegevens controleert voor de voorwaarde van de controlebeperking, een of meer waarden worden gevonden die niet aan de voorwaarde van de beperking voldoen, zoals u kunt zien in de volgende foutmelding:

om de CONTROLEBEPERKING opnieuw te kunnen definiëren, moeten we de gegevens wijzigen of verwijderen die voorkomen dat de beperking wordt gemaakt.,de484761″>

1
2
3
UPDATE ConstraintDemo4 SET Salaris =300 WAAR ID IN (2,3)

Nu, de CHECK-beperking kan worden gedefinieerd zonder probleem zoals hieronder wordt getoond:

SQL Server, kunt u deze uitschakelen van de CONTROLE voorwaarde voor speciale gevallen, zoals het invoegen van een enorme hoeveelheid gegevens, zonder de zorg over het voldoen aan de beperking voorwaarde voor testdoeleinden, of door het veranderen van de in de business logica., Dit geval is alleen geldig voor de controle en buitenlandse belangrijke beperkingen die u Tijdelijk kunt uitschakelen.,riting de beperking naam, als in de T-SQL commando hieronder:

1
2
3

ALTER TABLE ConstraintDemo4 GEENCONTROLE BEPERKING ALLE

Van de beperking CHECK definitie, kunt u opgeven dat de beperking wordt gemaakt zonder het controleren van bestaande rijen, maar de grenzen worden gemarkeerd als niet vertrouwde., kunt u alle CHECK-constraints, alle tegelijk,met behulp van de T-SQL commando hieronder:

1
2
3

ALTER TABLE ConstraintDemo4 CHECK CONSTRAINT ALLE

Tijdens het inschakelen van de vorige CHECK-beperking, zult u zien dat SQL Server zal niet klagen over de niet-gecontroleerde gegevens die breekt met de beperkingen die voorwaarde., In dit geval wordt de domeinintegriteit van de gegevens niet gehandhaafd.

om dit probleem op te lossen, kan het commando DBCC CHECKCONSTRAINTS eenvoudig worden gebruikt om de gegevens te identificeren die de constraintconditie in een gespecificeerde tabel of constraint schenden, rekening houdend met het niet uitvoeren van dat commando in de piekuren, omdat het de prestaties van de SQL Server zal beïnvloeden omdat er geen database snapshot wordt gebruikt.,v id=”ff419aa09d”>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

Het resultaat zal u tonen de twee Salaris waarden die breken de CHECK-beperking aandoening, zoals hieronder weergegeven:

EEN CHECK constraint kan ook worden aangemaakt met behulp van de SQL Server Management Studio tool, door met de rechtermuisknop te klikken op de gewenste tabel en het selecteren van de Ontwerp-optie., In het weergegeven Ontwerp-venster, klik met de rechtermuisknop en kies Controleren Beperkingen optie als volgt:

Van de Check Constraints venster, kunt u de CHECK-beperking naam, expressie en als het controleren van de bestaande gegevens nodig, zoals hieronder weergegeven:

STANDAARD Beperking

EEN STANDAARD voorwaarde wordt gebruikt om een standaard kolom waarde voor de omvang van de ingevoegde rijen als er geen waarde is opgegeven voor die kolom in de instructie INSERT., De standaardbeperking helpt bij het behouden van de domeinintegriteit door de juiste waarden voor de kolom op te geven, voor het geval de gebruiker er geen waarde voor opgeeft. De standaardwaarde kan een constante waarde, een systeemfunctiewaarde of NULL zijn.,elow:

1
2
3
4

ALTER TABLE ConstraintDemo5
Add Constraint DF__Beperken__Medewerkers STANDAARD (GETDATE()) VOOR EmployeeDate

Ook de STANDAARD beperking kan worden gedefinieerd met behulp van de SQL Server Management Studio, door met de rechtermuisknop te klikken op de gewenste tabel en kies Ontwerp optie., Selecteer vervolgens de kolom waarvoor u een standaardwaarde wilt toewijzen door te bladeren door het venster Kolomeigenschappen zoals hieronder getoond:

Ik hoopte dat dit artikel, en het vorige, hebben geholpen om de zes SQL Server constraint types uit te leggen. Aarzel niet om vragen te stellen in de onderstaande opmerkingen.,nly gebruikt SQL Server-Beperkingen: NIET NULL is, UNIEKE en PRIMAIRE zeer BELANGRIJKE

links

  • Maak Check Constraints
  • Beperkingen
  • Standaard
  • het Maken van Foreign Key Relaties
  • CHECK Constraints

  • Auteur
  • Laatste Berichten
Ahmad Yaseen is een Microsoft Big Data engineer met diepgaande kennis van en ervaring met SQL BI -, SQL-Server Database Beheer en Ontwikkeling velden., hij is een Microsoft Certified Solution Expert in Data Management en Analytics, Microsoft Certified Solution Associate in SQL Database administratie en ontwikkeling, Azure Developer Associate en Microsoft Certified Trainer.
ook draagt hij bij met zijn sql tips in veel blogs.,
Bekijk alle berichten van Ahmad Yaseen

Laatste berichten door Ahmad Yaseen (zie all)
  • Hoe monitor Azure Data Factory – 15 januari 2021
  • met Behulp van Source Control in Azure Data Factory – 12 januari 2021
  • met Behulp van de Sjablonen in Azure Data Factory – januari 8, 2021


Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *