Klausel CONSTRAINT

kitsendus on peaaegu nagu register, aga seda saab kasutada ka teise tabeliga seose loomiseks.

CONSTRAINT-klauslit kasutatakse lausetes ALTER TABLE ja CREATE TABLE kitsenduste loomiseks või kustutamiseks. CONSTRAINT-klausleid on kahte tüüpi: üks on mõeldud kitsenduse loomiseks ühel väljal ja teine kitsenduse loomiseks mitmel väljal.

Märkus. : Microsoft Accessi andmebaasimootor ei toeta lauset CONSTRAINT ega ühtegi andmekirjelduskeeles lauset muudes andmebaasides peale Microsoft Accessi andmebaaside. Selle asemel kasutage meetodeid DAO Create.

Süntaks

Ühe välja kitsendus:

CONSTRAINT nimi {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES välistabel [(välisväli1, välisväli2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Mitme välja kitsendus:

CONSTRAINT nimi
{PRIMARY KEY (primaar1[, primaar2 [, ...]]) |
UNIQUE (kordumatu1[, kordumatu2 [, ...]]) |
NOT NULL (mittetühi1[, mittetühi2 [, ...]]) |
FOREIGN KEY [NO INDEX] (viide1[, viide2 [, ...]]) REFERENCES välistabel [(välisväli1 [, välisväli2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

CONSTRAINT-klausel koosneb järgmistest osadest.

Osa

Kirjeldus

nimi

Loodava kitsenduse nimi.

primaar1, primaar2

Välja või väljade nimed, millele määratakse primaarvõti.

kordumatu1, kordumatu2

Välja või väljade nimed, mis määratakse kordumatuks võtmeks.

mittetühi1, mittetühi2

Välja või väljade nimed, mis tohivad sisaldada ainult mittetühja väärtust.

viide1, viide2

Välisvõtmega välja või väljade nimed, mis viitavad muudes tabelites olevatele väljadele.

välistabel

Selle välistabeli nimi, mis sisaldab parameetris välisväli määratud välja või välju.

välisväli1, välisväli2

Välistabeli nende väljade nimed, mis on määratud parameetrites viide1 ja viide2. Võite selle klausli välja jätta, kui viidatud väli on välistabeli primaarvõti.


Märkused

Ühe välja kitsendamise süntaksit kasutatakse lausete ALTER TABLE või CREATE TABLE välja määratlemise klauslis, mis järgneb lauses välja andmetüübi määrangule.

Mitme välja kitsendamise süntaksit kasutage siis, kui kasutate reserveeritud sõna CONSTRAINT lausetes ALTER TABLE või CREATE TABLE väljaspool väljadefinitsiooni klauslit.

CONSTRAINT-klausli abil saate väljale määrata ühe järgmistest kitsendustüüpidest.

  • Välja kordumatuks võtmeks määramise jaoks saate kasutada võtmesõna UNIQUE. See tähendab, et kahel tabeli kirjel ei saa olla sellel väljal sama väärtust. Kordumatuks saate kitsendada kõiki välju või väljaloendeid. Kui mitme välja kitsendus on määratud kordumatuks võtmeks, peavad kõigi indeksisse kuuluvate väljade kombineeritud väärtused olema kordumatud isegi siis, kui kaks või enam kirjet on sama väärtusega üksnes ühel väljal.

  • Võtmesõnu PRIMARY KEY saate kasutada tabelis ühe välja või väljade kogumi määramiseks primaarvõtmeks. Kõik primaarvõtme väärtused peavad olema kordumatud ega tohi olla väärtusega Null ning ühe tabeli kohta võib olla ainult üks primaarvõti.

    Märkus. : Ärge määrake võtmesõna PRIMARY KEY kitsendust tabelile, millel juba on primaarvõti, vastasel juhul ilmneb tõrge.

  • Võtmesõnu FOREIGN KEY saate kasutada väljade võõrvõtmeks määramise jaoks. Kui võõrtabeli primaarvõti koosneb mitmest väljast, tuleb teil kasutada mitme välja kitsenduse määratlust, kus on loendatud kõik viitavad väljad, võõrtabeli nimi ning viitavate väljadega samas järjekorras võõrtabeli viidatavate väljade nimed. Kui viidatavad väljad on võõrtabeli primaarvõtmeks, ei pea te neid välju määrama. Vaikimisi peab andmebaasimootor viidatavateks väljadeks võõrtabeli primaarvõtit.

    Võõrvõtme kitsendused määratlevad teatud toimingud, mida tehakse siis, kui vastava primaarvõtme väärtust muudetakse.

  • Saate määratleda võõrtabeliga tehtavad toimingud, mis vastavad primaarvõtmega tehtud toimingutele tabelis, mille kohta on määratletud CONSTRAINT-klausel. Vaadake näiteks järgmist määratlust tabeli Kliendid jaoks.

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

Vaadake järgmist tabeli Tellimused määratlust, mis määratleb tabeli primaarvõtmele viitava võõrvõtme seose:

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

Klauslid ON UPDATE CASCADE ja ON DELETE CASCADE on mõlemad võõrvõtmes määratletud. Klausel ON UPDATE CASCADE tähendab, et kui kliendi identifikaatorit (Kliendi_Id) tabelis Kliendid värskendatakse, siis värskendatakse seda tabeli Tellimused kaudu. Iga tellimust, mis sisaldab vastavat kliendi ID väärtust, värskendatakse automaatselt uue väärtusega. Klausel ON DELETE CASCADE tähendab, et kui klient kustutatakse tabelist Kliendid, siis kustutatakse ka kõik read tabelis Tellimused, mis sisaldavad sama kliendi ID väärtust.

Kaaluge tabeli Tellimused määratlemiseks järgmist näidet, kus kasutatakse toimingu CASCADE asemel toimingut SET NULL.

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

Klausel ON UPDATE SET NULL tähendab, et kui kliendi ID-d (Kliendi_Id) tabelis Kliendid värskendatakse, siis häälestatakse vastavad võõrvõtme väärtused tabelis Tellimused automaatselt väärtusele NULL. Sarnaselt tähendab klausel ON DELETE SET NULL, et kui klient tabelist Kliendid kustutatakse, siis häälestatakse kõik vastavad võõrvõtmed tabelis Tellimused väärtusele NULL.

Võõrvõtmete indeksite automaatse loomise vältimiseks saab kasutada modifikaatorit NO INDEX. Seda võõrvõtme määratlusvormi tuleks kasutada üksnes siis, kui tekkivaid indeksväärtusi sagedasti dubleeritakse. Kui võõrvõtme indeksi väärtusi sagedasti dubleeritakse, pole indeksi kasutamine nii tõhus kui tabeli skannimine. Tabelis, kus pidevalt lisatakse ja kustutatakse ridu, vähendab seda tüüpi indeksi säilitamine jõudlust ega too mingisugust kasu.



Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liituge Office Insideri programmiga

Kas sellest teabest oli abi?

Täname tagasiside eest!

Täname tagasiside eest! Tundub, et võiksime teid kokku viia ühega meie Office'i tugiagentidest, kes aitab teil probleemi lahendada.

×