SQLShack (Suomi)

0 Comments

edellisessä artikkelissa Yleisesti käytetty SQL Server Rajoitukset: EI NULL AINUTLAATUINEN ja ENSISIJAINEN AVAIN, me kuvataan yksityiskohtaisesti, kolme ensimmäistä tyypit SQL Server rajoitukset; NOT NULL, AINUTLAATUINEN ja perusavain. Tässä artikkelissa, aiomme keskustella muut kolme rajoitukset; ULKO-NÄPPÄINTÄ, TARKISTA ja OLETUKSENA kuvaamalla jokainen lyhyesti ja antaa käytännön esimerkkejä.,

FOREIGN KEY Constraint

viiteavain on tietokanta-avain, jota käytetään yhdistää kaksi pöytää yhteen. FOREIGN KEY constraint tunnistaa suhteita taulujen viittaamalla sarake tai sarakkeet, Lapsi taulukko, joka sisältää ulko-avain, ENSISIJAINEN AVAIN sarake tai sarakkeet, Vanhemman taulukko.

suhde lapsen ja vanhemman taulukoita ylläpidetään tarkastamalla olemassaolon lapsi taulukko viiteavaimen arvot viitattu vanhemman taulukossa on perusavain, ennen kuin asetat nämä arvot osaksi lapsen pöytä., Tällä tavalla, FOREIGN KEY constraint, lapsi taulukko, joka viittaa ENSISIJAINEN AVAIN vanhemman taulukko, valvoa tietokannan viite-eheyden. Referentiaalinen eheys varmistaa, että tietokantataulukoiden välinen suhde säilyy tietojen lisäämisen aikana. Muista, että ENSISIJAINEN AVAIN rajoitus takaa, että ei ole NULL tai päällekkäisiä arvoja valitun sarakkeen tai sarakkeita lisätään tuohon pöytään, valvoa yhteisön eheyttä kyseisen taulukon., Yhteisön eheys täytäntöön perusavain-ja viite-eheyden täytäntöön ULKO-NÄPPÄINTÄ yhdessä muodostavat key integrity.

FOREIGN KEY constraint eroaa perusavain rajoitus, että voit luoda vain yksi perusavain per jokainen taulukko, kanssa kyky luoda useita ULKOMAISIA rajoitteet kunkin taulukon viittaamalla useita vanhemman taulukko. Toinen ero on, että ULKO-NÄPPÄIMEN avulla lisäämällä NULL-arvoja, jos ei OLE NOLLA rajoite määritellään tämän avaimen, mutta perusavain ei hyväksy Nollia.,

FOREIGN KEY constraint tarjoaa sinulle myös mahdollisuuden hallita, mihin toimiin ryhdytään, kun viitataan arvo vanhemman taulukko on päivitetty tai poistettu, käyttäen UPDATE-ja DELETE-lausekkeita. Tuetut toimet, jotka voidaan toteuttaa, kun poistaa tai päivittää vanhemman taulukon arvot ovat:

  • EI TOIMI: Kun PÄIVITTÄÄ tai POISTAA lausekkeita on asetettu MITÄÄN, suoritetaan päivitys-tai poisto-operaatio vanhemman taulukko epäonnistuu virheen.,
  • CASCADE: Asetus PÄIVITÄ tai POISTA lausekkeita, CASCADE, sama toiminto suoritetaan viitattu arvot vanhemman taulukko heijastuu liittyvät arvot lapsi taulukossa. Jos viitattu arvo esimerkiksi poistetaan vanhempainpöydästä, poistetaan myös kaikki lapsitaulukon siihen liittyvät rivit.
  • SET NULL: tämä ON PÄIVITYS ja POISTA lausekkeita vaihtoehto, jos viitattu arvot vanhemman taulukko poistetaan tai muutetaan, kaikki siihen liittyvät arvot lapsi taulukossa on NULL-arvo.,
  • ASETTAA OLETUS: Käyttämällä SET OLETUSASETUS ON UPDATE-ja DELETE-lausekkeita, määrittää, että jos viitataan arvot vanhemman taulukko on päivitetty tai poistettu, niihin liittyviä arvoja lapsi taulukko, jossa ULKO-AVAIN sarakkeet asetetaan oletusarvoon.

Voit lisätä viiteavain rajoite, kun määritellään sarakkeen käyttäen CREATE TABLE T-SQL, tai lisätä sen jälkeen taulukon luominen käyttämällä ALTER TABLE T-SQL. Luomme kaksi uutta taulukkoa, jotka ymmärtävät ulkomaisen keskeisen rajoitustoiminnon., Ensimmäinen taulukko toimii emotaulukkona, jonka ID-sarake on määritelty ensisijaiseksi AVAINPYLVÄÄKSI. Toinen taulukko toimii lapsi taulukko, jossa on ID-sarake on määritelty viiteavain-sarake, joka viittaa ID-sarakkeessa vanhemman taulukko.,> ID INT PRIMARY KEY,

Nimi VARCHAR(50) NULL
)
MENNÄ
LUO TAULUKKO ConstraintDemoChild
(
– CID INT PRIMARY KEY,
ID INT viiteavain VIITTAUKSET ConstraintDemoParent(ID)
)

Kun luodaan kaksi taulukkoa, voimme lisätä kolme kirjaa vanhemman pöytä, ja kaksi kirjaa lapsi taulukko, käyttäen seuraavia INSERT lausuntoja:

tuloksena näyttää, että kolme kirjaa ovat onnistuneesti työnnetään vanhemman taulukko., Ensimmäinen tallenne, jonka yritimme lisätä lasten taulukkoon, lisätään virheettömästi, koska 1: n TUNNISTEARVO on jo olemassa vanhempainpöydässä.,koska ID-arvo 4 ei ole olemassa vanhemman taulukko, ja koska FOREIGN KEY constraint, et voi lisätä ID-arvo, lapsen pöytä, että ei ole olemassa vanhemman taulukko:

Tarkistaminen vanhemman ja lapsen taulukoiden sisältöä, näet, että vain yksi levy työnnetään lapsi taulukko, kuten näet alla:

Koska me ei maininnut FOREIGN KEY constraint nimi luotaessa lapsi taulukko, SQL Server tulee määrittää yksilöllinen nimi, että voimme hakea 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
LISÄÄ RAJOITUS FK__ConstraintDe__ID
FOREIGN KEY (TUNNUS) REFERENCES ConstraintDemoParent(ID);

operaatio epäonnistuu, kuten ID-arvo 4 ei ole olemassa vanhempi pöytä ja rikkoo viite-eheyden välillä lapsen ja vanhemman taulukoita, kuten nähdään seuraavan virheilmoituksen:

pystyä luomaan FOREIGN KEY constraint lapsi taulukko, meidän täytyy poistaa että ensimmäinen konflikti poistamalla tai päivittämällä, että ennätys., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., ASETA ID =2, MISSÄ ID = 4

Nyt FOREIGN KEY constraint on luotu onnistuneesti, ilman virhe, kuten alla:

viiteavain rajoitus voidaan määritellä avulla SQL Server Management Studio-työkalua. Napsauta hiiren kakkospainikkeella vaadittua taulukkoa ja valitse suunnitteluvaihtoehto.,> Avautuneesta ikkunasta voit helposti määrittää nimen, FOREIGN KEY constraint, taulukot ja sarakkeet, jotka osallistuvat tässä suhteessa, klikkaamalla Taulukot Ja Sarakkeet Erittely, jos tarkistaa olemassa olevia tietoja tarvitaan, ja lopuksi toiminto, joka suoritetaan, kun viitattu tietue on poistettu tai muutettu vanhemman taulukko, kuten kuvassa alla:

TARKISTA Rajoitus

TARKISTA rajoite on määritelty sarake tai sarakkeet raja-arvojen vaihteluväli, joka voi olla työnnetään nämä sarakkeet, käyttämällä ennalta kunnossa., TARKISTA rajoitus tulee toimia, arvioida lisätty tai muutettu arvoja, missä arvo, joka täyttää ehdon lisätään taulukkoon, muuten, aseta toiminta on hävitettävä. Samalle sarakkeelle voidaan määrittää useita TARKISTUSRAJOITUKSIA.

Määrittely TARKISTA rajoitus ehto on jotenkin samanlainen kirjallisesti, JOSSA mainittiin kyselyn, käyttää erilaisia vertailu operaattoreita, kuten JA, TAI, VÄLILLÄ, noin, ja ON NULL kirjoittaa sen Boolean-lauseke, joka palauttaa TRUE, FALSE tai UNKNOWN., TARKASTUSRAJOITE palauttaa tuntemattoman arvon, kun tilassa on nolla-arvo. TARKISTA rajoitus on käytetty lähinnä valvoa verkkotunnuksen eheys rajoittamalla liitetään arvoja, niitä, jotka noudattavat määriteltyjä arvoja, alue tai muoto säännöt.

luodaan uusi yksinkertainen taulukko, jossa on kolme saraketta; ID-sarake, joka pidetään ENSISIJAINEN AVAIN, että taulukon Nimi ja Palkka. Palkkasarakkeessa on määritelty TARKASTUSRAJOITUS sen varmistamiseksi, että sarakkeeseen ei lisätä nolla-tai negatiivisia arvoja.,v>6

7
8
9
LUO TAULUKKO ConstraintDemo4
(
ID INT PRIMARY KEY,
Nimi VARCHAR(50) NULL,
INT Palkka TARKISTAA (Palkka>0)
)
MENNÄ

Jos olet suorittaa alle kolme LISÄÄ lausuntoja:

on selvää, syntyy tulos, että ensimmäinen levy on asetettu laitteeseen, jossa ei ole virhe, kuin jos Palkka-arvo täyttää tarkkailun kunnossa.,rovided Palkka-arvot eivät täytä TARKISTA rajoitus kunnossa vuoksi lisäämällä nolla ja negatiivinen Palkka arvoja, kuten voitte nähdä seuraavan virheilmoituksen:

Tarkistaa taulukon tiedot osoittavat, että vain ensimmäinen rivi, joka läpäisi TARKISTA, ehto, rajoitus lisätään taulukkoon kuin alla:

Olemme aiemmin tässä artikkelissa, että CHECK-rajoitteen avulla lisäämällä NULL-arvoja, jos osallistui sarakkeet salli NULL, ja NULL-arvojen arvioidaan TUNTEMATON ilman heitto mitään virhettä., Tämä on selvästi alle ennätys, joka on asetettu onnistuneesti, vaikka edellyttäen, arvo Palkka sarake is NULL:

Jos et tarkistaa CHECK-rajoitteen määritelmä edellisessä LUODA TAULUKKO selvitys, näet, että meillä ei ole mainittu nimi on määritelty rajoite. Tällöin SQL Server antaa kyseiselle rajoitukselle yksilöllisen nimen, joka voidaan näyttää tiedustelemalla INFORMATION_SCHEMA.TABLE_CONSTRAINTS system view for the Constrainintdemo4 table., Tulos tulee olla kuten alla:

TARKISTA rajoitus voidaan pudottaa käyttää ALTER TABLE-T-SQL.,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., Tämä johtuu siitä, että, kun SQL-Palvelin tarkistaa jo olemassa olevat tiedot TARKISTA rajoitus kunnossa, yksi tai useampia arvoja, jotka eivät täytä rajoitus kunto löytyy, kuten voitte nähdä seuraavan virheilmoituksen:

pystyä määrittelemään toimintojen uudelleen, meidän pitäisi muuttaa tai poistaa tiedot, joka estää rajoitus syntyy.,de484761″>

1
2
3
PÄIVITYS ConstraintDemo4 SET Palkka =300, MISSÄ ID IN (2,3)

Nyt, TARKISTA rajoitus voidaan määritellä, jossa ei ole kysymys, kuten alla:

SQL Server avulla voit poistaa CHECK constraint erityistapauksissa, kuten lisäämällä valtava määrä dataa välittämättä siitä, kokous-rajoitus kunnon testausta varten, tai johtuu muuttuviin liiketoiminnan logiikkaa., Tämä tapaus on voimassa vain tarkistaa ja ulkomaisten avain rajoituksia, jotka voit poistaa tilapäisesti.,ipad, tai kirjoittaa rajoitus nimi, kuten T-SQL-komennon alla:

1
2
3

ALTER TABLE ConstraintDemo4 NOCHECK RAJOITUS KAIKKI

CHECK-rajoitteen määritelmä, voit määrittää, että rajoitus on luotu tarkistamatta olemassa olevia rivejä, mutta rajoitus on merkitty ei ole luotettu., voi, jotta kaikki CHECK rajoitteet, kaikki kerralla,käyttäen T-SQL-komennon alla:

1
2
3

ALTER TABLE ConstraintDemo4 TARKISTA RAJOITUS KAIKKI

Samalla mahdollistaa edellisen TARKISTA rajoitus, näet, että SQL-Palvelin ei valittavat valitsematta tiedot, joka rikkoo rajoitus kunnossa., Tällöin tietojen verkkotunnuksen eheys ei säily.

Voit korjata tämän ongelman, DBCC CHECKCONSTRAINTS komento voidaan helposti käyttää tunnistamaan tiedot, jotka rikkoo rajoitus edellytys tietyn pöydän tai rajoitus huomioon ottaen, ei juosta, että komento ruuhka-aikoina, koska se vaikuttaa SQL-Palvelimen suorituskykyä, koska ei hyödyntämällä tietokantaan tilannekuva.,v id=”ff419aa09d”>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

tuloksena näyttää kaksi Palkka-arvot, jotka rikkovat TARKISTA rajoitus kunnossa, kuten alla:

TARKISTA rajoite voi olla myös luotu avulla SQL Server Management Studio-työkalu, napsauta hiiren kakkospainikkeella haluamasi taulukko ja valitaan Muotoilu vaihtoehto., Näytössä Muotoilu-ikkunassa hiiren kakkospainikkeella ja valitse Tarkista Rajoitukset vaihtoehto seuraavasti:

Check Rajoitteet-ikkunassa voit määrittää TARKISTAA rajoite nimi, ilme ja jos tarkistaa olemassa olevia tietoja tarvitaan, kuten alla:

DEFAULT Rajoitus

OLETUKSENA rajoitus on tapana tarjota default sarakkeen arvo lisätään rivejä, jos mitään arvoa ei ole määritetty, että sarakkeeseen INSERT julkilausuman., Oletuksena rajoitus auttaa säilyttämään verkkotunnuksen eheyttä tarjoamalla oikea-arvot sarakkeessa, jos käyttäjä ei anna arvoa sille. Oletusarvo voi olla vakioarvo, järjestelmän funktioarvo tai NULL.,elow:

1
2
3
4

ALTER TABLE ConstraintDemo5
Lisää Rajoitus DF__Rajoittaa__Työnte DEFAULT (GETDATE()) SILLÄ EmployeeDate

Myös, DEFAULT rajoitus voidaan määritellä käyttäen SQL Server Management Studio, klikkaamalla hiiren kakkospainikkeella haluamasi taulukko ja valitse Muotoilu vaihtoehto., Valitse sarake, joka määrittää oletusarvo selaamalla Sarakkeen Ominaisuudet-ikkuna kuten alla:

toivoin että tämä artikkeli, ja edellinen, ovat auttaneet selittämään kuusi SQL Server rajoitus tyyppejä. Voit vapaasti esittää kysymyksiä alla olevissa kommenteissa.,nly käyttää SQL Server Rajoitukset: EI NULL, AINUTLAATUINEN ja perusavain

Hyödyllisiä linkkejä

  • Luoda Tarkista Rajoitukset
  • Rajoitteet
  • Oletukset
  • Luo viiteavain Suhteet
  • TARKISTA Rajoitukset

  • Tekijä
  • Viimeisimmät Viestit
Ahmad Yaseen on Microsoftin Big Data-insinööri, jolla on syvä tuntemus ja kokemus SQL BI, SQL Server-Tietokanta Hallinnon ja Kehittämisen aloilla.,
Hän on Microsoft Certified Solution Expert Tietojen Hallinta ja Analytiikka, Microsoft Sertifioitu Ratkaisu Liittää SQL-Tietokanta Hallinnon ja Kehittämisen, Azure Kehittäjä Osakkuus-ja Microsoft Certified Trainer.
hän myös osallistuu SQL-vinkeillään moniin blogeihin.,
Näytä kaikki viestit Ahmad Yaseen

Uusimmat viestit by Ahmad Yaseen (katso kaikki)
  • Miten valvoa Azure Data Factory – 15. tammikuuta 2021
  • Käyttää Lähde-Ohjaus Azure Data Factory – tammikuu 12, 2021
  • Mallien Azure Data Factory – 8. tammikuuta 2021


Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *