SQLShack (Norsk)

0 Comments

I den forrige artikkelen brukte SQL Server Begrensninger: NOT NULL, UNIKE og primærnøkkel, vi har beskrevet i detalj, de tre første typer av SQL Server begrensninger; NOT NULL, UNIKE og primærnøkkel. I denne artikkelen vil vi diskutere de tre andre begrensninger; UTENLANDSKE NØKKEL, SJEKK og STANDARD ved å beskrive hvert ett øyeblikk, og å gi praktiske eksempler.,

FOREIGN KEY Constraint

En sekundærnøkkel er en database tasten som brukes til å koble sammen to bord sammen. Den FOREIGN KEY constraint identifiserer relasjoner mellom tabellene ved å referere en kolonne, eller et sett med kolonner, i Barnet tabellen som inneholder de utenlandske nøkkel, til den PRIMÆRE NØKKELEN kolonne eller et sett med kolonner, i den Overordnede tabellen.

forholdet mellom barnet og forelderen tabeller opprettholdes ved å sjekke eksistensen av barnet bord UTENLANDSKE VIKTIGE verdier i de nevnte overordnede tabellen er primærnøkkel før du setter disse verdiene inn i barnet bordet., På denne måten, FOREIGN KEY constraint, i barnet tabell som refererer til primærnøkkelen i den overordnede tabellen, vil håndheve database referanseintegritet. Referanseintegritet sikrer at forholdet mellom databasen tabeller er bevart i løpet av data innsetting prosessen. Husker at den PRIMÆRE KEY begrensning garantier som ikke er NULL eller dupliserte verdier for den valgte kolonnen eller kolonner vil bli satt inn i tabellen, håndheve enhet integritet for at bordet., Den enhet integritet håndheves av primærnøkkelen og referanseintegritet håndheves av UTENRIKS-TASTEN sammen utgjør de nøkkelen integritet.

The FOREIGN KEY constraint skiller seg fra primærnøkkel begrensninger i det, du kan bare opprette én primærnøkkel for hver tabell, med muligheten til å opprette flere UTENLANDSKE VIKTIGE begrensninger i hver tabell, ved å referere flere overordnede tabellen. En annen forskjell er at de UTENLANDSKE TASTEN kan sette inn NULL-verdier hvis det ikke er IKKE er NULL bindingstid definert på denne tasten, men den PRIMÆRE NØKKELEN ikke godtar Nullverdier.,

The FOREIGN KEY constraint gir deg også muligheten til å kontrollere hvilke tiltak som vil bli tatt når de refererte verdi i den overordnede tabellen er oppdatert eller slettet, og bruker den PÅ OPPDATER og SLETT klausuler. De støttede tiltak som kan tas når du sletter eller oppdatere den overordnede tabellen verdier er:

  • INGEN TILTAK: Når det PÅ OPPDATERE eller SLETTE klausuler er satt til INGEN HANDLING, utført oppdatere eller slette drift i den overordnede tabellen vil mislykkes med en feil.,
  • CASCADE: Innstilling PÅ OPPDATERE eller SLETTE klausuler å CASCADE, den samme handlingen som skal utføres på de nevnte verdier av den overordnede tabellen vil bli reflektert til relaterte verdier i barnet bordet. For eksempel, hvis de refererte verdi er slettet i den overordnede tabellen, og alle relaterte rader i barnet bordet, blir også slettet.
  • ANGI NULL: Med dette PÅ OPPDATER og SLETT klausuler alternativ, hvis de refererte verdier i den overordnede tabellen er slettet eller endret, alle relaterte verdier i barnet tabellen er satt til NULL-verdi.,
  • ANGI som STANDARD: ved Hjelp av SETTET STANDARD alternativet PÅ OPPDATER og SLETT punktene angir at, hvis de refererte verdier i den overordnede tabellen er oppdatert eller slettet, det relaterte verdier i barnet tabell med UTENLANDSKE NØKKEL kolonner vil bli satt til standard verdi.

Du kan legge til de UTENLANDSKE VIKTIGE begrensninger mens definere kolonnen ved hjelp av CREATE TABLE T-SQL-setningen, eller legge det etter oppretting av tabeller ved hjelp av ALTER TABLE T-SQL-setningen. Vi vil opprette to nye tabeller for å forstå FOREIGN KEY constraint funksjonalitet., Den første tabellen vil fungere som den overordnede tabellen med ID-kolonne er definert som en primærnøkkel kolonne. Den andre tabellen vil fungere som barnet tabellen, med ID-kolonnen definert som UTENLANDSKE NØKKEL kolonne som refererer til ID-kolonnen på den overordnede tabellen.,> ID INT PRIMARY KEY,

Navn VARCHAR(50) NULL
)
OPPRETT BORD ConstraintDemoChild
(
CID INT PRIMARY KEY,
ID INT FOREIGN KEY REFERANSER ConstraintDemoParent(ID)
)

Etter å ha laget to tabeller, setter vi inn tre plater til den overordnede tabellen, og to poster til barn bordet, ved hjelp av følgende INSERT-setninger:

resultatet vil vise deg at de tre postene har blitt satt inn i den overordnede tabellen., Den første posten som vi prøvde å sette inn i barnet tabellen er satt inn uten noen feil som ID-verdien av 1 finnes allerede i den overordnede tabellen.,fordi ID-verdien av 4 ikke finnes i den overordnede tabellen, og på grunn av de UTENLANDSKE VIKTIGE begrensninger, vil du ikke være i stand til å sette inn et ID-verdien til barnet tabell som ikke finnes i den overordnede tabellen:

Kontrollere de overordnede og underordnede tabeller innhold, vil du se at bare et kort blir satt inn i barnet tabell, som du kan se nedenfor:

Som vi ikke nevner den FOREIGN KEY constraint navnet mens du oppretter barnet bordet, SQL Server vil gi den et unikt 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
LEGG til TVANG FK__ConstraintDe__ – ID
FOREIGN KEY (ID) REFERANSER ConstraintDemoParent(ID);

operasjonen vil mislykkes, som ID-verdien av 4 ikke finnes i den overordnede tabellen og bryter referanseintegritet mellom barn og foreldre bord, som vi har sett i de følgende feilmelding:

for Å være i stand til å opprette UTENLANDSKE VIKTIGE begrensninger i barnet bordet, må vi eliminere denne konflikten først ved å slette eller oppdatere denne posten., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., ANGI ID =2 DER ID = 4

Nå FOREIGN KEY constraint vil bli opprettet uten noen feil, som vist nedenfor:

EN sekundærnøkkel tvang kan være definert ved hjelp av SQL Server Management Studio verktøy. Høyre-klikk på den aktuelle tabellen, og velg Design alternativ.,> Fra den vises vinduet, kan du enkelt angi navn på UTENLANDSKE VIKTIGE begrensninger, tabeller og kolonner som skal delta i denne sammenheng, ved å klikke på Tabeller Og Kolonner Spesifikasjon, hvis du sjekker de eksisterende data er nødvendig, og til slutt den handlingen som skal utføres når det refereres til posten er slettet eller endret på den overordnede tabellen, som vist nedenfor:

SJEKK Begrensning

EN SJEKK begrensning er definert på en kolonne eller et sett med kolonner for å begrense omfanget av verdier, som kan settes inn i disse kolonnene, ved hjelp av en forhåndsdefinert tilstand., SJEKK begrensning som kommer til handling for å vurdere satt inn eller endrede verdier, der verdien som tilfredsstiller tilstanden vil bli satt inn i tabellen, ellers, sett drift vil bli forkastet. Det er lov til å angi flere KONTROLLER begrensninger for den samme kolonnen.

Definere SJEKK begrensning tilstand er noe lignende til å skrive WHERE-betingelsen i en spørring, ved hjelp av ulike sammenligningen operatører, som OG, ELLER, MELLOM, I, SOM og ER NULL skriver Boolske uttrykk som vil returnere TRUE, FALSE, eller UKJENT., SJEKK begrensning vil gå tilbake UKJENT verdi når en NULL-verdi er til stede i den tilstanden. SJEKK begrensning brukes i hovedsak til å håndheve domene integritet ved å begrense satt inn verdier til de som følger de definerte verdier, utvalg eller format regler.

La oss lage en ny enkel tabell med tre kolonner; ID-kolonne som er ansett som den PRIMÆRE NØKKELEN til bordet, Navn og Lønn. En SJEKK begrensning er definert på Lønn-kolonnen for å sørge for at ingen null eller negative verdier er satt inn i denne kolonnen.,v>6

7
8
9
OPPRETT BORD ConstraintDemo4
(
ID INT PRIMARY KEY,
Navn VARCHAR(50) NULL,
Lønn INT SJEKK (Lønn>0)
)

Hvis du utføre under tre SETT uttalelser:

Det er klart fra den genererte resultat at den første posten er satt inn med ingen feil som tilbys Lønn verdi oppfyller kontrollere tilstanden.,tilgjengelig Lønn verdier som ikke oppfyller SJEKK begrensning stand på grunn av å sette inn null og negativ Lønn verdier, som du kan se i følgende feilmelding:

å Sjekke tabellen er data viser at bare den første raden som passerte SJEKK begrensning tilstand vil bli satt inn i tabellen nedenfor:

Vi har nevnt tidligere i denne artikkelen at SJEKK begrensning kan sette inn NULL-verdier hvis de deltok kolonner tillater NULL, og NULL-verdier vil bli evaluert som UKJENTE uten å kaste eventuelle feil., Dette er klart fra under post som er satt inn riktig, selv om det oppgitt verdi av den Lønn kolonne er NULL:

Hvis du leser SJEKK begrensning definisjonen i forrige CREATE TABLE statement, vil du se at vi ikke har nevnt navnet på den definerte tvang. I dette tilfellet, SQL Server vil tilordne et unikt navn for den begrensning som kan vises ved å sende en spørring til INFORMATION_SCHEMA.TABLE_CONSTRAINTS systemet vise for ConstraintDemo4 bordet., Resultatet blir som vist nedenfor:

SJEKK begrensning kan bli droppet å bruke ALTER TABLE T-SQL-setningen.,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å grunn av det faktum at, mens SQL Server er å sjekke den allerede eksisterende data for SJEKK begrensning tilstand, en eller flere verdier som ikke oppfyller begrensning tilstand er funnet, som du kan se i følgende feilmelding:

for Å være i stand til å definere SJEKK begrensning igjen, vi skal endre eller slette data som hindrer tvang blir opprettet.,de484761″>

1
2
3
OPPDATER ConstraintDemo4 ANGI Lønn =300 DER ID-en I (2,3)

Nå, SJEKK begrensning kan være definert med ingen problem, som vist nedenfor:

SQL Server lar deg deaktivere SJEKK begrensning for spesielle tilfeller, for eksempel å sette inn enorme mengder data uten å bry seg om det å møte den begrensningen forutsetning for testing, eller på grunn av endring i forretningslogikken., Denne saken er bare gyldig for SJEKK og UTENLANDSKE VIKTIGE begrensninger som du kan deaktivere midlertidig.,riting begrensningen navn, som i T-SQL-kommandoen nedenfor:

1
2
3

ENDRE TABELLEN ConstraintDemo4 NOCHECK TVANG ALLE

Fra SJEKK begrensning definisjon, kan du angi at den begrensningen vil bli opprettet uten å sjekke eksisterende rader, men den begrensningen vil bli markert som ikke er klarert., kan aktivere alle SJEKK begrensninger, alle på en gang,ved hjelp av T-SQL-kommandoen nedenfor:

1
2
3

ENDRE TABELLEN ConstraintDemo4 SJEKK BEGRENSNING ALLE

Mens du aktivere den forrige SJEKK begrensning, vil du se at SQL Server vil ikke klage om ukontrollert data som bryter med de begrensninger tilstand., I dette tilfellet, domene integritet av data er ikke opprettholdt.

for Å løse dette problemet, DBCC CHECKCONSTRAINTS kommandoen kan lett bli brukt til å identifisere de data som er i strid med de begrensninger tilstand i en angitt tabell eller tvang, ta hensyn til ikke å kjøre denne kommandoen i rushtiden, så vil det påvirke SQL Server ytelse grunn til ikke å benytte en database snapshot.,v id=»ff419aa09d»>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

resultatet vil vise deg to Lønn verdier som bryter SJEKK begrensning tilstand, som vist nedenfor:

EN SJEKK begrensning kan også være opprettet ved hjelp av SQL Server Management Studio verktøyet, ved å høyre-klikke på den aktuelle tabellen og velge Design alternativ., Fra den vises Design-vinduet, høyreklikk og velg Sjekk Begrensninger alternativet som følger:

Fra Sjekke Begrensninger-vinduet, kan du angi SJEKK begrensning navn, uttrykk og hvis du sjekker de eksisterende data er nødvendig, som vist nedenfor:

STANDARD Begrensning

EN STANDARD tvang brukes for å gi en standard kolonnen verdi for den innsatte rader hvis ingen verdi er angitt for den aktuelle kolonne på SETT inn-erklæringen., Standard begrensning hjelper med å opprettholde domene integritet ved å gi riktige verdier for kolonnen, i tilfelle brukeren ikke gir en verdi for det. Standard verdi kan være en konstant verdi, et system funksjonen verdi eller NULL.,elow:

1
2
3
4

ENDRE TABELLEN ConstraintDemo5
Legg til Tvang DF__Begrense__Emplo STANDARD (GETDATE()) FOR EmployeeDate

Også, STANDARD begrensning kan være definert ved hjelp av SQL Server Management Studio, ved å høyre-klikke på den aktuelle tabellen, og velg Design alternativ., Deretter velger du kolonnen som du vil tilordne en standardverdi for, ved å bla gjennom Kolonnen Egenskaper-vinduet, som vist nedenfor:

jeg håpet at denne artikkelen, og den forrige, har bidratt til å forklare de seks SQL Server begrensning typer. Føl deg fri til å stille spørsmål i kommentarfeltet under.,kun brukt SQL Server Begrensninger: NOT NULL, UNIKE og PRIMÆR NØKKEL

Nyttige lenker

  • Opprett Sjekk Begrensninger
  • Begrensninger
  • Standarder
  • Opprett Foreign Key Relasjoner
  • SJEKK Begrensninger

  • Forfatter
  • Siste Innlegg
Ahmad Yaseen er en Microsoft Big Data-ingeniør med dyp kunnskap og erfaring i SQL BI, SQL Server Database Administrasjon og Utvikling felt.,
Han er en Microsoft Certified Solution Ekspert på Data Management og Analytics, Microsoft Certified Solution som arbeider i SQL-Database Administrasjon og Utvikling, Azure Developer Førsteamanuensis og Microsoft Certified Trainer.
Også, han bidrar med sin SQL tips i mange blogger.,
Vis alle innlegg av Ahmad Yaseen

Siste innlegg av Ahmad Yaseen (se alle)
  • Hvordan å overvåke Azure Data Fabrikk – 15. januar 2021
  • ved Hjelp av Source Control i Azure Data Fabrikk – januar 12, 2021
  • ved Hjelp av Maler i Azure Data Fabrikk – 8. januar 2021


Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *