Office
Kirjaudu sisään

CONSTRAINT-lause

rajoitus on samanlainen kuin indeksi, mutta sillä voidaan myös muodostaa suhde toiseen taulukkoon.

Käytät CONSTRAINT-lausetta ALTER TABLE- ja CREATE TABLE -lausekkeissa rajoitteiden luomiseen tai poistamiseen. CONSTRAINT-lauseita on kahdenlaisia: yhdellä luodaan rajoite yksittäiseen kenttään ja toisella luodaan rajoite useampaan kuin yhteen kenttään.

Huomautus: Microsoft Access -tietokantamoduuli ei tue CONSTRAINT-lausekkeen eikä minkään muunkaan DDL-lausekkeen käyttöä muiden kuin Microsoft Access -tietokantojen yhteydessä. Käytä sen sijaan DAO-luontimenetelmiä.

Syntaksi

Yhden kentän rajoite:

CONSTRAINT nimi {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES viitetaulukko [(viitekenttä1, viitekenttä2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Usean kentän rajoite:

CONSTRAINT nimi
{PRIMARY KEY (perus1[, perus2 [, ...]]) |
UNIQUE (yksilöllinen1[, yksilöllinen2 [, ...]]) |
NOT NULL (eityhjäarvo1[, eityhjäarvo2 [, ...]]) |
FOREIGN KEY [NO INDEX] (viittaus1[, viittaus2 [, ...]]) REFERENCES viitetaulukko [(viitekenttä1 [, viitekenttä2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

CONSTRAINT-lauseessa on seuraavat osat:

Osa

Kuvaus

nimi

Luotavan rajoitteen nimi.

perus1, perus2

Sen kentän tai niiden kenttien nimi, joille määritetään perusavain.

yksilöllinen1, yksilöllinen2

Sen kentän nimi tai nimet, jotka määritetään yksilölliseksi avaimeksi.

eityhjäarvo1, eityhjäarvo2

Sen kentän tai niiden kenttien nimet, joissa saa käyttää vain muita kuin tyhjäarvoja.

viittaus1, viittaus2

Sen tai niiden viiteavain-kenttien nimet, jotka viittaavat toisen taulukon kenttiin.

viitetaulukko

Sen viitetaulukko:n nimi, joka sisältää kohteen viitekenttä määrittämän kentän tai kentät.

viitekenttä1, viitekenttä2

Sen tai niiden kohteessa viitetaulukko olevan kentän tai kenttien nimet, joita määrittävät viittaus1, viittaus2. Tämän lauseen voi jättää pois, jos kenttä, johon viitataan, on kohteen viitetaulukko perusavain.


Huomautuksia

Käytät yhden kentän rajoitteen syntaksia ALTER TABLE- tai CREATE TABLE -lausekkeen kenttämääritelmälauseessa heti kentän tietotyypin määrittämisen jälkeen.

Käytät monen kentän rajoitetta aina, kun varattu sana CONSTRAINT on käytössä kenttämääritelmälauseen ulkopuolella ALTER TABLE- tai CREATE TABLE -lausekkeessa.

CONSTRAINTin avulla voit määrittää kentälle yhden seuraavista rajoitetyypeistä:

  • Voit käyttää varattua sanaa UNIQUE, kun haluat määrittää kentän yksilölliseksi avaimeksi. Tämä tarkoittaa, että tässä kentässä kahdella tietueella ei saa olla samaa arvoa. Voit rajata minkä tahansa kentän tai kenttien luettelon yksilölliseksi. Jos monen kentän rajoite on määritetty yksilölliseksi avaimeksi, kaikkien kenttien arvojen yhdistelmän on oltava yksilöllinen, vaikka kahdella tai useammalla tietueella olisi sama arvo vain yhdessä kentistä.

  • Voit käyttää varattuja PRIMARY KEY -sanoja taulukon yhden kentän tai kenttäryhmän määrittämiseksi perusavaimeksi. Kaikkien perusavaimen arvojen on oltava yksilöllisiä eivätkä ne saa olla tyhjäarvoja, ja taulukolla saa olla vain yksi perusavain.

    Huomautus: Älä määritä PRIMARY KEY -rajoitetta taulukolle, jolla on jo perusavain; muuten syntyy virhe.

  • Voit käyttää varattuja FOREIGN KEY -sanoja, jos haluat määrittää kentän viiteavaimeksi. Jos viitetaulukon perusavain koostuu useammasta kuin yhdestä kentästä, sinun on käytettävä usean kentän rajoitemääritelmää, joka luettelee kaikki viitekentät, viitetaulukon nimen ja viitetaulukossa olevat kohdekentät samassa järjestyksessä kuin viittaavat kentät on lueteltu. Jos viittausten kohdekenttä tai -kentät ovat viitetaulukon perusavain, sinun ei tarvitse täsmentää kohdekenttiä. Tietokantaohjelma toimii oletusarvoisesti niin, että kohdekenttiä käsitellään viitetaulukon perusavaimena.

    Viiteavaimen rajoitteet määrittelevät ne erityiset toimenpiteet, jotka suoritetaan, kun vastaavaa perusavaimen arvoa muutetaan:

  • Voit määrittää viitetaulukossa suoritettavia toimenpiteitä, jotka perustuvat vastaavan toimenpiteen suorittamiseen perusavaimella siinä taulukossa, jossa RAJOITE on määritelty. Pohdi esimerkiksi seuraavaa määritelmää Asiakkaat-taulukolle:

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

Pohdi seuraavaa määritelmää Tilaukset-taulukolle, joka määrittää viiteavaimen suhteen käyttäen Asiakkaat-taulukon perusavainta:

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

Sekä ON UPDATE CASCADE- että ON DELETE CASCADE -lauseet on määritelty viiteavaimella. ON UPDATE CASCADE -lause tarkoittaa, että jos asiakkaan tunnus (Asiakastunnus) päivitetään Asiakas-taulukossa, päivitys limitetään koko Tilaukset-taulukkoon. Jokaiselle tilaukselle, jossa on vastaava asiakastunnuksen arvo, uusi arvo päivitetään automaattisesti. ON DELETE CASCADE -lause tarkoittaa, että jos asiakas poistetaan asiakastaulukosta, kaikki tilaustaulukon rivit, jotka sisältävät saman asiakastunnuksen, poistetaan yhtä lailla.

Pohdi seuraavaa tilaustaulukon vaihtoehtoista määritelmää, jossa käytetään SET NULL -toimenpidettä CASCADE-toimenpiteen sijasta:

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 -lause tarkoittaa, että jos asiakastunnus päivitetään asiakastaulukossa, vastaavat tilaustaulukon viiteavainarvot saavat automaattisesti NULL-arvon. Vastaavasti ON DELETE SET NULL -lause tarkoittaa, että jos asiakastunnus poistetaan asiakastaulukosta, vastaavat tilaustaulukon viiteavainarvot saavat automaattisesti NULL-arvon.

Jotta estettäisiin indeksien automaattinen luominen viiteavaimille, voidaan käyttää määritettä NO INDEX. Tätä tapaa määritellä viiteavain tulisi käyttää vain sellaisissa tapauksissa, joissa syntyvät indeksiarvot saattaisivat usein monistua. Jos viiteavaimen indeksin arvot monistuvat useaan otteeseen, indeksin käyttö saattaa olla tehottomampaa kuin pelkkä taulukon skannaus. Tämäntyyppisen indeksin ylläpito ja siihen liittyvä taulukon rivien lisääminen ja poistaminen heikentää suorituskykyä, eikä siihen liity mitään etuja.



Kehitä Office-taitojasi
Tutustu koulutusmateriaaliin
Saat uudet ominaisuudet ensimmäisten joukossa
Liity Office Insider -käyttäjiin

Oliko näistä tiedoista hyötyä?

Kiitos palautteesta!

Kiitos palautteestasi! Näyttää siltä, että Office-tukiedustajamme avusta voi olla sinulle hyötyä.

×