Ypatybė CONSTRAINT

apribojimas yra panašus į indeksą, nors jis taip pat gali būti naudojamas norint sukurti ryšį su kita lentele.

Sąlyga CONSTRAINT sakiniuose ALTER TABLE ir CREATE TABLE naudojama norint sukurti arba naikinti apribojimus. Yra du CONSTRAINT sąlygų tipai: vienas skirtas sukurti vieno lauko apribojimą, o kitas – daugiau nei vieno lauko apribojimą.

Pastaba : „Microsoft Access“ duomenų bazės modulis nepalaiko CONSTRAINT ar kitų duomenų aprašų kalbų sakinių naudojimo su ne „Microsoft Access“ duomenų bazėmis. Vietoj to naudokite DAO metodus Create.

Sintaksė

Vieno lauko apribojimas:

CONSTRAINT pavadinimas {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES išorinėlentelė [(išorinislaukas1, išorinislaukas2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Kelių laukų apribojimas:

CONSTRAINT pavadinimas
{PRIMARY KEY (pirminis1[, pirminis2 [, ...]]) |
UNIQUE (unikalus1[, unikalus2 [, ...]]) |
NOT NULL (ne_null1[, ne_null2 [, ...]]) |
FOREIGN KEY [NO INDEX] (nuor1[, nuor2 [, ...]]) REFERENCES išorinėlentelė [(išorinislaukas1 [, išorinislaukas2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Sąlyga CONSTRAINT sudaryta iš šių dalių:

Dalis

Aprašas

Pavadinimas

Kuriamo apribojimo pavadinimas.

pirminis1, pirminis2

Lauko arba laukų, kurie bus nustatyti kaip pirminis raktas, pavadinimai.

unikalus1, unikalus2

Lauko arba laukų, kurie bus nustatyti kaip unikalus raktas, pavadinimai.

ne_null1, ne_null2

Lauko arba laukų, kuriems leidžiamos tik ne Null reikšmės, pavadinimai.

nuor1, nuor2

Išorinio rakto lauko arba laukų, kurie nurodo kitos lentelės laukus, pavadinimai.

išorinė_lentelė

Pavadinimas išorinės lentelės, kurioje yra laukas arba laukai, kuriuos nurodo išorinis_laukas.

išorinislaukas1,išorinislaukas2

Dalyje išorinė_lentelė esančių lauko arba laukų, kuriuos nurodo nuoroda1, nuoroda2, pavadinimas. Galite praleisti šią sąlygą, jei nurodomas laukas yra pirminis dalies išorinė_lentelė raktas.


Pastabos

Vieno lauko apribojimo sintaksė sakinio ALTER TABLE arba CREATE TABLE lauko apibrėžimo sąlygoje naudojama iš karto po lauko duomenų tipo nurodymo.

Kelių laukų apribojimo sintaksė naudojama kaskart, kai naudojamas rezervuotasis žodis CONSTRAINT ne lauko apibrėžimo sąlygoje ALTER TABLE arba CREATE TABLE sakinyje.

Naudodami CONSTRAINT galite nustatyti lauką kaip vieną iš toliau nurodytų apribojimų tipų:

  • Galite naudoti UNIQUE rezervuotąjį žodį, norėdami nustatyti lauką kaip unikalų raktą. Tai reiškia, kad jokie lentelės įrašai šiame lauke negali turėti tos pačios reikšmės. Galite apriboti bet kokį lauką ar laukų sąrašą kaip unikalų. Jei kelių laukų apribojimas nustatytas kaip unikalus raktas, visų indekso laukų sudėtinės reikšmės turi būti unikalios, net jei du arba daugiau įrašų turi tą pačią reikšmę tik viename iš laukų.

  • Galite naudoti PRIMARY KEY rezervuotuosius žodžius , kad nustatytumėte lentelės vieną lauką arba laukų rinkinį kaip pirminį raktą. Visos pirminio rakto reikšmės turi būti unikalios ir ne Null, taip pat lentelė gali turėti tik vieną pirminį raktą.

    Pastaba : Nenustatykite PRIMARY KEY apribojimo lentelėje, kuri jau turi pirminį raktą. Tokiu atveju įvyks klaida.

  • Galite naudoti FOREIGN KEY rezervuotuosius žodžius, norėdami nustatyti lauką kaip išorinį raktą. Jei išorinės lentelės pirminį raktą sudaro daugiau nei vienas laukas, turite naudoti kelių laukų apribojimo apibrėžimą, išvardydami visus nurodančiuosius laukus, išorinės lentelės pavadinimą ir nurodytųjų išorinės lentelės laukų pavadinimus ta pačia tvarka, kuria išvardyti nurodantieji laukai. Jei nurodytasis laukas arba laukai yra išorinės lentelės pirminis raktas, nereikia nurodyti nurodytųjų laikų. Pagal numatytuosius parametrus, duomenų bazės modulis veikia taip, tarsi išorinės lentelės pirminis raktas yra nurodytieji laukai.

    Išorinės lentelės apribojimai apibrėžia konkrečius veiksmus, kurie bus atlikti, kai pakeičiama atitinkamo pirminio rakto reikšmė.

  • Galite nurodyti veiksmus, kurie bus atliekami su išorine lentele, pagal atitinkamą veiksmą, atliekamą su pirminiu raktu lentelėje, kurioje apibrėžtas CONSTRAINT. Pavyzdžiui, apsvarstykime šį lentelės Klientai apibrėžimą:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Apsvarstykime šį lentelės Užsakymai apibrėžimą, kuris nustato išorinio rakto ryšį, nurodydamas lentelės Klientai pirminį raktą:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Tiek ON UPDATE CASCADE, tiek ir ON DELETE CASCADE sąlyga yra apibrėžiama pagal išorinį raktą. Sąlyga ON UPDATE CASCADE reiškia, kad jei kliento identifikatorius (Kliento_ID) atnaujinamas lentelėje Klientai, naujinimas lentelėje Užsakymai bus išdėstytas pakopomis. Kiekvienas užsakymas, kuriame yra atitinkama kliento identifikatoriaus reikšmė, bus automatiškai atnaujinamas gaunant naują reikšmę. Sąlyga ON DELETE CASCADE reiškia, kad jei klientas pašalinamas iš lentelės Klientai, visos lentelės Užsakymai eilutės, kuriose yra ta pati kliento identifikatoriaus reikšmė, taip pat bus panaikintos.

Apsvarstykime šį, kitokį, lentelės Užsakymai apibrėžimą, naudojantį SET NULL veiksmą vietoj CASCADE veiksmo:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

ON UPDATE SET NULL sąlyga reiškia, kad jei kliento identifikatorius (Kliento_ID) atnaujinamas lentelėje Klientai, atitinkamos išorinio rakto reikšmės lentelėje Užsakymai bus automatiškai nustatytos kaip NULL. Taip pat ON DELETE SET NULL sąlyga reiškia, kad jei klientas panaikinamas iš lentelės Klientai, visi atitinkami išoriniai raktai lentelėje Užsakymai bus automatiškai nustatyti kaip NULL.

Siekiant išvengti automatinio išorinių raktų indeksų kūrimo, galima naudoti modifikatorių NO INDEX. Šios rūšies išorinio rakto apibrėžimas turėtų būti naudojamas tik tuo atveju, jei gaunamos indekso reikšmės būtų dažnai dubliuojamos. Kai išorinio rakto indekso reikšmės dažnai dubliuojamos, naudoti indeksą gali būti mažiau efektyvu nei tiesiog atlikti lentelės nuskaitymą. Išlaikant šio tipo indeksą, kai eilutės įterpiamos ir pašalinamos iš lentelės, sumažinamas našumas ir neatnešama jokios naudos.



Tobulinkite savo įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijunkite prie „Office Insider“ dalyvių

Ar ši informacija buvo naudinga?

Dėkojame už jūsų atsiliepimus!

Dėkojame už jūsų atsiliepimą! Panašu, kad gali būti naudinga jus sujungti su vienu iš mūsų „Office“ palaikymo agentų.

×