SQLShack (Dansk)

0 Comments

I den foregående artikel, der Almindeligvis anvendes SQL Server Begrænsninger: NOT NULL, UNIKKE og PRIMÆR NØGLE, vi beskrev i detaljer de første tre typer af SQL Server begrænsninger; NOT NULL, UNIKKE og PRIMÆR NØGLE. I denne artikel vil vi diskutere de andre tre begrænsninger; fremmed nøgle, CHECK og standard ved at beskrive hver enkelt kort og give praktiske eksempler.,

fremmed nøgle begrænsning

en fremmed nøgle er en databasenøgle, der bruges til at forbinde to tabeller sammen. Den udenlandske nøglebegrænsning identificerer forholdet mellem databasetabellerne ved at henvise til en kolonne eller et sæt kolonner i Barnetabellen, der indeholder den fremmede nøgle, til kolonnen primær nøgle eller sæt kolonner i overordnet tabel.

forholdet mellem barnet og forældretabellerne opretholdes ved at kontrollere eksistensen af barnetabellen udenlandske nøgleværdier i den refererede forældretabels primære nøgle, før disse værdier indsættes i barnetabellen., På denne måde vil den udenlandske nøglebegrænsning i barnetabellen, der refererer til den primære nøgle i forældertabellen, håndhæve databasehenvisningsintegritet. Referenceintegritet sikrer, at forholdet mellem databasetabellerne bevares under dataindsættelsesprocessen. Husk, at den primære nøglebegrænsning garanterer, at ingen NULL-eller duplikatværdier for den eller de valgte kolonner vil blive indsat i den tabel, hvilket håndhæver enhedens integritet for den tabel., Enhedens integritet, der håndhæves af den primære nøgle, og den referenceintegritet, der håndhæves af den fremmede nøgle, udgør tilsammen nøgleintegriteten.

den udenlandske nøglebegrænsning adskiller sig fra den primære nøglebegrænsning, idet du kun kan oprette en primær nøgle pr. En anden forskel er, at den fremmede nøgle tillader indsættelse af NULL-værdier, hvis der ikke er nogen NULL-begrænsning defineret på denne nøgle, men den primære nøgle accepterer ikke nuller.,

den udenlandske nøglebegrænsning giver dig også mulighed for at kontrollere, hvilke handlinger der vil blive truffet, når den refererede værdi i overordnet tabel opdateres eller slettes ved hjælp af on UPDATE og ON DELETE-klausulerne. De understøttede handlinger, der kan udføres, når du sletter eller opdaterer overordnet tabels værdier, inkluderer:

  • ingen handling: Når on UPDATE eller on DELETE-klausulerne er indstillet til ingen handling, mislykkes den udførte opdatering eller sletning i overordnet tabel med en fejl.,
  • CASCADE: Indstilling af on UPDATE eller on DELETE-klausulerne til CASCADE, den samme handling, der udføres på de refererede værdier i overordnet tabel, afspejles i de relaterede værdier i barnetabellen. For eksempel, hvis den refererede værdi slettes i overordnet tabel, slettes alle relaterede rækker i barnetabellen også.
  • SET NULL: med dette ved opdatering og ved sletning af klausuler, hvis de refererede værdier i overordnet tabel slettes eller ændres, er alle relaterede værdier i barnetabellen indstillet til NULL-værdi.,
  • Indstil standard: brug af indstillingen Indstil standard i On UPDATE og ON DELETE-klausulerne angiver, at hvis de refererede værdier i overordnet tabel opdateres eller slettes, vil de relaterede værdier i barnetabellen med kolonner med fremmed nøgle blive indstillet til dens standardværdi.

Du kan tilføje den udenlandske nøglebegrænsning, mens du definerer kolonnen ved hjælp af Opret tabel T-s .l-sætningen, eller tilføj den efter oprettelsen af tabellen ved hjælp af Alter TABLE t-s .l-sætningen. Vi opretter to nye tabeller for at forstå funktionen for fremmed nøglebegrænsning., Den første tabel fungerer som overordnet tabel med ID-kolonnen defineret som en primær NØGLEKOLONNE. Den anden tabel fungerer som barnetabellen, med kolonnen ID defineret som kolonnen fremmed nøgle, der refererer til ID-kolonnen på overordnet tabel.,> ID INT PRIMARY KEY,

Navn VARCHAR(50) NULL
)
GO
CREATE TABLE ConstraintDemoChild
(
CID INT PRIMARY KEY,
ID INT FREMMED NØGLE-REFERENCER ConstraintDemoParent(ID)
)

Efter oprettelse af de to borde, vi vil indsætte tre poster til den overordnede tabel, og to registreringer til barnet bordet, ved hjælp af de INDSÆTTE følgende udsagn:

resultatet vil vise dig, at de tre optegnelser er korrekt indsat i den overordnede tabel., Den første post, som vi forsøgte at indsætte i barnetabellen, indsættes uden fejl, da ID-værdien på 1 allerede findes i overordnet tabel.,fordi ID værdi af 4 ikke findes i den overordnede tabel, og på grund af den FREMMEDE NØGLE begrænsning, vil du ikke være i stand til at indsætte et ID-værdi til barnet tabel, der ikke findes i den overordnede tabel:

Kontrollere forælder og barn tabeller indhold, du vil se, at kun én registrering, der er indsat i barn-tabel, som du kan se nedenfor:

Som vi ikke nævner FOREIGN KEY constraint navn og samtidig skabe barn bordet, SQL Server vil tildele et entydigt navn, som vi kan hente fra 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) HENVISNINGER ConstraintDemoParent(ID);

operation vil mislykkes, som ID værdi af 4 ikke findes i den overordnede tabel, og bryder referentiel integritet mellem barn og forælder tabeller, som det ses i det følgende fejlmeddelelse:

At være i stand til at skabe den FREMMEDE NØGLE begrænsning i barnet bordet, vi er nødt til at fjerne denne konflikt første ved at slette eller ajourføring af registreringen., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., SET ID =2, HVOR ID = 4

Nu FOREIGN KEY constraint vil blive oprettet uden nogen fejl, som vist nedenfor:

EN FOREIGN KEY constraint kan defineres ved hjælp af SQL Server Management Studio værktøj. Højreklik på den ønskede tabel og vælg Designindstillingen.,> Fra det vindue, der vises, kan du nemt angive navnet på den FOREIGN KEY constraint, de tabeller og kolonner, der vil deltage i dette forhold, ved at klikke på de Tabeller Og Kolonner, Specifikation, hvis kontrol af eksisterende data, der er nødvendig, og endelig den handling, der udføres, når der refereres til, registrering er slettet eller ændret på den overordnede tabel, som vist nedenfor:

CHECK Constraint

EN CHECK begrænsning er defineret på en kolonne eller sæt af kolonner for at begrænse antallet af værdier, der kan indsættes i disse kolonner, ved hjælp af en foruddefineret tilstand., KONTROLBEGRÆNSNINGEN træder i kraft for at evaluere de indsatte eller ændrede værdier, hvor den værdi, der opfylder betingelsen, vil blive indsat i tabellen, ellers vil indsatsen blive kasseret. Det er tilladt at angive flere KONTROLBEGRÆNSNINGER for den samme kolonne. definition af KONTROLBEGRÆNSNINGSBETINGELSEN svarer på en eller anden måde til at skrive WHEREHERE-klausulen i en forespørgsel ved hjælp af de forskellige sammenligningsoperatører, såsom og, eller, mellem, I, ligesom og er NULL for at skrive dets boolske udtryk, der vil returnere sandt, falsk eller ukendt., KONTROLBEGRÆNSNINGEN returnerer ukendt værdi, når en NULL-værdi er til stede i tilstanden. KONTROLBEGRÆNSNINGEN bruges hovedsageligt til at håndhæve domæneintegriteten ved at begrænse de indsatte værdier til dem, der følger de definerede værdier, rækkevidde eller formatregler.

lad os oprette en ny simpel tabel, der har tre kolonner; id-kolonnen, der betragtes som den primære nøgle i den tabel, navn og løn. En KONTROLBEGRÆNSNING er defineret i Lønkolonnen for at sikre, at der ikke indsættes nul eller negative værdier i den kolonne.,v>6

7
8
9
CREATE TABLE ConstraintDemo4
(
ID INT PRIMARY KEY,
Navn VARCHAR(50) NULL,
Løn INT IND (Løn>0)
)
GO

Hvis du udfører de nedenstående tre SÆT udsagn:

Det er klart fra den genererede resultat, at den første registrering er indsat med ingen fejl som Løn værdi opfylder kontrol tilstand.,ræ Løn værdier, der ikke opfylder CHECK constraint tilstand på grund af indsættelse af nul og negative Løn værdier, som du kan se i de følgende fejlmeddelelse:

Kontrol af tabellens data viser, at kun den første række, der gik IND for tvang tilstand vil blive indsat i en tabel som nedenfor:

Vi har nævnt tidligere i denne artikel, at den CHECK constraint gør det muligt at indsætte NULL-værdier, hvis de deltog kolonner tillade NULL, og NULL-værdier vil blive vurderet som UKENDT uden at kaste nogen fejl., Dette fremgår af nedenstående registrering, der er indsat med succes, selv om den medfølgende værdi af Løn kolonnen er NULL:

Hvis du gennemgår CHECK constraint definitionen i det forrige CREATE TABLE-sætning, du vil se, at vi ikke har nævnt navnet på den, der er defineret tvang. I dette tilfælde tildeler s .l Server et unikt navn til den begrænsning, der kan vises ved at forespørge INFORMATION_SCHEMA.TABLE_CONSTRAINTS systemvisning til ConstraintDemo4 bordet., Resultatet vil være som vist nedenfor:

KONTROLBEGRÆNSNINGEN kan droppes ved hjælp af Alter TABLE T-s .l-sætningen.,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., Dette er på grund af det faktum, at mens SQL Server er at kontrollere de allerede eksisterende data for CHECK constraint tilstand, en eller flere værdier, der ikke opfylder betingelsen betingelse er fundet, som du kan se i de følgende fejlmeddelelse:

At være i stand til at definere CHECK constraint igen, vi bør ændre eller slette de data, der forhindrer, at den begrænsning, der ligger i at blive oprettet.,de484761″>

1
2
3
UPDATE ConstraintDemo4 SÆT Løn =300, HVOR ID I (2,3)

Nu, CHECK constraint kan defineres med ingen problem, som vist nedenfor:

SQL Server giver dig mulighed for at deaktivere CHECK begrænsning til særlige tilfælde, såsom indsættelse af store mængder data uden at bekymre sig om at møde den begrænsning stand til testformål, eller som følge af ændringer i forretningslogikken., Denne sag er kun gyldig for CHECK-og udenlandske nøglebegrænsninger, som du midlertidigt kan deaktivere.,riting den begrænsning navn, som i T-SQL-kommando:

1
2
3

ALTER TABLE ConstraintDemo4 NOCHECK TVANG ALLE

Fra CHECK constraint definitionen, kan du angive, at den begrænsning, der vil blive skabt uden at tjekke eksisterende rækker, men den begrænsning, vil være markeret som ikke er tillid til., kan gøre det muligt for alle CHECK begrænsninger, alle på én gang,ved hjælp af T-SQL-kommando:

1
2
3

ALTER TABLE ConstraintDemo4 CHECK CONSTRAINT ALLE

Mens der sætter tidligere IND begrænsning, vil du se, at SQL-Server, vil ikke klage over den ukontrollerede data, der bryder den begrænsning tilstand., I dette tilfælde opretholdes dataens domæneintegritet ikke.

for At løse dette problem, DBCC CHECKCONSTRAINTS kommando kan nemt bruges til at identificere data, der krænker den begrænsning tilstand i en bestemt tabel eller tvang, under hensyntagen til ikke at køre denne kommando i myldretiden, da det vil påvirke af SQL Server-ydeevne grund til ikke at udnytte et øjebliksbillede af databasen.,v id=”ff419aa09d”>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

resultatet vil vise dig de to Løn værdier, at bryde IND begrænsning tilstand, som vist nedenfor:

EN CHECK tvang kan også være skabt ved hjælp af SQL Server Management Studio værktøj, ved at højre-klikke på den ønskede tabel og vælge det Design mulighed., Fra de viste Design-vinduet, højreklik og vælg Check Begrænsninger mulighed som følger:

Fra Ind Begrænsninger vindue, kan du angive den IND tvang navn, udtryk og hvis kontrol af eksisterende data, der er nødvendig, som vist nedenfor:

STANDARD Tvang

EN STANDARD tvang er anvendt for at give en standard kolonne, værdi for de indsatte rækker, hvis der ikke er angivet nogen værdi for denne kolonne i dialogboksen INDSÆT erklæring., Standardbegrænsningen hjælper med at opretholde domæneintegriteten ved at give korrekte værdier for kolonnen, hvis brugeren ikke giver en værdi for den. Standardværdien kan være en konstant værdi, en systemfunktions værdi eller NULL.,elow:

1
2
3
4

ALTER TABLE ConstraintDemo5
Add Constraint DF__Begrænse__Emplo STANDARD (GETDATE()) FOR EmployeeDate

STANDARD tvang kan defineres ved hjælp af SQL Server Management Studio, ved at højre-klikke på den ønskede tabel, og vælg Design mulighed., Derefter skal du vælge den kolonne, som du vil tildele en standardværdi for, ved at gennemse Kolonnen vinduet Egenskaber som vist nedenfor:

jeg håbet, at denne artikel, og den tidligere, har bidraget til at forklare de seks SQL Server begrænsning typer. Du er velkommen til at stille spørgsmål i kommentarerne nedenfor.,nly bruges SQL Server Begrænsninger: NOT NULL, UNIKKE og PRIMÆR NØGLE

Nyttige link

  • Opret Ind Begrænsninger
  • Begrænsninger
  • Defaults
  • Opret Fremmed Nøgle-Relationer
  • CHECK Begrænsninger

  • Forfatter
  • Seneste Indlæg
Ahmad Yaseen er et Microsoft-Big Data-ingeniør med indgående viden og erfaring med SQL BI, SQL Server-Database Administration og Udvikling.,
Han er en Microsoft Certified Solution Expert i Data Management og Analytics, Microsoft Certified Solution Lektor i SQL-Databasen Administration og Udvikling, Azure Developer partner og Microsoft Certified Trainer.
han bidrager også med sine S .l-tip i mange blogs.,
Vis alle indlæg af Ahmad Yaseen

Seneste indlæg af Ahmad Yaseen (se alle)
  • Hvordan man kan overvåge Azure Data Fabrik – januar 15, 2021
  • Brug af Source Control i Azure Data Fabrik – januar 12, 2021
  • ved Hjælp af Skabeloner i Azure Data Fabrik – 8 januar 2021


Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *