Stavek CONSTRAINT

Omejitev je podobna kazalu, čeprav lahko z njo ustvarite tudi relacijo z drugo tabelo.

Stavek CONSTRAINT uporabite v izjavah ALTER TABLE in CREATE TABLE, ko želite ustvariti ali izbrisati omejitve. Obstajata dve vrsti stavkov CONSTRAINT: eden za ustvarjanje omejitve v enem polju, drugi pa za ustvarjanje omejitve v več poljih.

Opomba : Mehanizem Microsoft Accessove zbirke podatkov ne podpira uporabe stavka CONSTRAINT ali katere koli izjave jezika definicije podatkov z zbirkami podatkov, ki niso iz programa Microsoft Access. Namesto tega uporabite načine »DAO Create«.

Sintaksa

Omejitev za eno samo polje:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Omejitev za več polj:

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Stavek CONSTRAINT je sestavljen iz teh delov:

Del

Opis

name

Ime omejitve, ki bo ustvarjena.

primary1, primary2

Ime polja ali polj, ki so določena kot primarni ključ.

unique1, unique2

Ime polja ali polj, ki so določena kot enolični ključ.

notnull1, notnull2

Ime polja ali polj, ki so omejena na vrednosti, ki niso ničelne.

ref1, ref2

Ime polja ali polj s tujim ključem, ki se sklicujejo na polja v drugi tabeli.

foreigntable

Ime tuje tabele s poljem ali polji, določenimi z foreignfield.

foreignfield1, foreignfield2

Ime polja ali polj v tuji tabeli (foreigntable), ki so določena s sklici ref1, ref2. Ta stavek lahko izpustite, če je sklicevano polje primarni ključ tuje tabele (foreigntable).


Opombe

Sintakso za omejitev za eno polje uporabite v stavku za definicijo polja v izjavi ALTER TABLE ali CREATE TABLE takoj za specifikacijo podatkovnega tipa polja.

Sintakso za omejitev za več polj uporabite vedno, ko uporabite rezervirano besedo CONSTRAINT izven stavka za definicijo polja v izjavi ALTER TABLE ali CREATE TABLE.

Z besedo CONSTRAINT lahko polje označite kot eno od teh vrst omejitev:

  • Z rezervirano besedo UNIQUE lahko polje označite kot enolični ključ. To pomeni, da nobena dva zapisa v tabeli ne moreta v tem polju imeti enake vrednosti. Poljubno polje ali seznam polj lahko omejite, da je enolično. Če je omejitev za več polj označena kot enolični ključ, morajo biti združene vrednosti vseh polj v indeksu enolične, tudi če imata dva ali več zapisov enako vrednost le v enem polju.

  • Z rezerviranima besedama PRIMARY KEY lahko eno polje ali nabor polj v tabeli označite kot primarni ključ. Vse vrednosti v primarnem ključu morajo biti enoličen in ne enake nič; vsaka tabela ima lahko le en primarni ključ.

    Opomba : Omejitve PRIMARY KEY ne nastavite za tabelo, ki že ima primarni ključ; v tem primeru pride do napake.

  • Z rezerviranima besedama FOREIGN KEY lahko polje označite kot tuji ključ. Če je primarni ključ v tuji tabeli sestavljen iz več polj, uporabite definicijo omejitve za več polj in v njej navedite vsa sklicna polja, ime tuje tabele in imena sklicnih polj v tuji tabeli v enakem vrstnem redu, kot so našteta sklicna polja. Če je sklicno polje ali polja primarni ključ tuje tabele, vam ni treba navesti sklicnih polj. Mehanizem zbirke podatkov se privzeto vede, kot da so primarni ključ tuje tabele sklicna polja.

    Omejitve tujega ključa definirajo določena dejanja, ki se izvedejo, ko se spremeni ustrezna vrednost primarnega ključa:

  • Dejanja, ki se izvedejo v tuji tabeli, lahko določite glede na ustrezno dejanje, ki se izvede v primarnem ključu v tabeli, v kateri je določena omejitev (CONSTRAINT). Oglejte si na primer to definicijo za tabelo »Stranke«:

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

Oglejte si spodnjo definicijo tabele »Naročila«, ki relacijo tujega ključa določa s sklicevanjem na primarni ključ v tabeli »Stranke«:

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

V tujem ključu sta določena stavka ON UPDATE CASCADE in ON DELETE CASCADE. Stavek ON UPDATE CASCADE pomeni, da bo takrat, ko je identifikator stranke (CustId) posodobljen v tabeli Stranke, ta posodobitev prenesena prek tabele Naročila. Vsako naročilo, ki vsebuje ustrezno vrednost identifikatorja stranke, bo samodejno posodobljeno z novo vrednostjo. Stavek ON DELETE CASCADE pomeni, da bodo takrat, ko je stranka izbrisana iz tabele Stranke, izbrisane vse vrstice v tabeli Naročila, ki vsebujejo ime te stranke.

Oglejte si spodnjo drugačno definicijo tabele Naročila, v kateri je namesto dejanja CASCADE uporabljeno dejanje 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

Stavek ON UPDATE SET NULL pomeni, da so takrat, ko je identifikator stranke (CustId) posodobljen v tabeli Stranke, ustrezne vrednosti tujega ključa v tabeli Naročila samodejno nastavljene na vrednost NULL. Stavek ON DELETE SET NULL pomeni, da so takrat, ko je stranka izbrisana iz tabele Stranke, vsi ustrezni tuji ključi v tabeli Naročila samodejno nastavljeni na vrednost NULL.

Če želite preprečiti samodejno ustvarjanje indeksov za tuje ključe, lahko uporabite modifikator NO INDEX. To obliko definicije tujega ključa uporabite le, ko bi bile vrednosti v indeksu pogosto podvojene. Ko so vrednosti v indeksu tujega ključa pogosto podvojene, je uporaba indeksa manj učinkovita od preprostega pregleda tabele. Vzdrževanje takšnega indeksa, kjer je treba vstavljati in brisati vrstice iz tabele, zmanjšuje učinkovitost delovanja in ne ponuja nobene koristi.



Razširite svoja znanja
Oglejte si izobraževanje
Prvi dobite nove funkcije
Pridružite se programu Office Insider

Vam je bila informacija v pomoč?

Zahvaljujemo se vam za povratne informacije.

Zahvaljujemo se vam za povratne informacije. Videti je, da bi vam prišla prav pomoč enega od naših Officeovih agentov za podporo.

×