Voit luoda ja muokata taulukoita, rajoituksia, indeksejä ja yhteyksiä Accessissa kirjoittamalla tietomäärityskyselyitä SQL-näkymässä. Tässä artikkelissa kerrotaan tietomäärityskyselyistä ja niiden käyttämisestä taulukoiden, rajoitusten, indeksien ja yhteyksien luomiseen. Tämän artikkelin avulla voit myös päättää, milloin tietomäärityskyselyä käytetään.
Tämän artikkelin sisältö
Yleiskatsaus
Toisin kuin muut Access-kyselyt, tietojen määrityskysely ei nouta tietoja. Sen sijaan tietomäärityskysely käyttää tietomäärityskieltä tietokantaobjektien luomiseen, muokkaamiseen tai poistamiseen.
Huomautus: DDL (Data Definition Language) on osa SQL (Structured Query Language) -kieltä.
Tietojen määrityskyselyt voivat olla käteviä. Voit poistaa tietokantarakenteen osia ja luoda niitä uudelleen säännöllisesti vain suorittamalla joitakin kyselyjä. Harkitse tietojen määrityskyselyn käyttämistä, jos sql-lausekkeet ovat sinulle tuttuja ja aiot poistaa ja luoda uudelleen tiettyjä taulukoita, rajoituksia, indeksejä tai yhteyksiä.
Varoitus: Tietomäärityskyselyjen käyttäminen tietokantaobjektien muokkaamiseen voi olla riskialtista, koska toimintoihin ei liity vahvistusvalintaikkunoita. Jos teet virheen, voit menettää tietoja tai muuttaa taulukon rakennetta vahingossa. Ole varovainen, kun muokkaat tietokannan objekteja tietojen määrityskyselyn avulla. Jos et ole vastuussa käyttämäsi tietokannan ylläpidosta, ota yhteyttä tietokannan järjestelmänvalvojaan ennen tietojen määrityskyselyn suorittamista.
Tärkeää: Tee varmuuskopio kaikista mukana olevista taulukoista, ennen kuin suoritat tietojen määrityskyselyn.
DDL-avainsanat
Avainsana. |
Yleismerkki |
LUO |
Luo indeksi tai taulukko, jota ei vielä ole. |
MUUTA |
Muokkaa aiemmin luotua taulukkoa tai saraketta. |
PUDOTA |
Poista aiemmin luotu taulukko, sarake tai rajoitus. |
LISÄÄ |
Lisää taulukkoon sarake tai rajoitus. |
SARAKE |
Käytä ADD-, ALTER- tai DROP-näppäimen kanssa |
RAJOITE |
Käytä ADD-, ALTER- tai DROP-näppäimen kanssa |
HAKEMISTO |
Käytä CREATE-toiminnossa |
TAULUKKO |
Käytä ALTER-, CREATE- tai DROP-toiminnolla |
Taulukon luominen tai muokkaaminen
Voit luoda taulukon LUO TAULUKKO -komennolla. LUO TAULUKKO -komennolla on seuraava syntaksi:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...][, CONSTRAINT constraint1 [, ...]])
CREATE TABLE -komennon ainoat pakolliset elementit ovat ITSE CREATE TABLE -komento ja taulukon nimi, mutta yleensä haluat määrittää joitakin kenttiä tai muita taulukon ominaisuuksia. Harkitse tätä yksinkertaista esimerkkiä.
Oletetaan, että haluat luoda taulukon, johon tallennetaan ostettavien käytettyjen autojen nimi, vuosi ja hinta. Haluat sallia nimelle enintään 30 merkkiä ja vuoden 4 merkkiä. Jos haluat luoda taulukon tietomäärityskyselyn avulla, toimi seuraavasti:
Huomautus: Sinun on ehkä ensin otettava tietokannan sisältö käyttöön, jotta tietojen määrityskysely voidaan suorittaa:
-
Valitse sanomapalkista Ota sisältö käyttöön.
Taulukon luominen
-
Valitse Luo-välilehden Makrot ja koodi -ryhmässä Kyselyn rakennenäkymä.
-
Valitse Rakenne-välilehdenKyselytyyppi-ryhmästäTietomääritys.
Rakenneruudukko on piilotettu, ja SQL-näkymän objektivälilehti tulee näkyviin.
-
Kirjoita seuraava SQL-lauseke:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.
Taulukon muokkaaminen
Jos haluat muokata taulukkoa, käytä ALTER TABLE -komentoa. ALTER TABLE -komennolla voit lisätä, muokata tai poistaa sarakkeita tai rajoituksia. ALTER TABLE -komennolla on seuraava syntaksi:
ALTER TABLE table_name predicate
jossa predikaatti voi olla jokin seuraavista:
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Oletetaan, että haluat lisätä 10-merkkisen tekstikentän, johon tallennetaan tietoja kunkin auton kunnosta. Voit tehdä seuraavaa:
-
Valitse Luo-välilehden Makrot ja koodi -ryhmässä Kyselyn rakennenäkymä.
-
Valitse Rakenne-välilehdenKyselytyyppi-ryhmästäTietomääritys.
Rakenneruudukko on piilotettu, ja SQL-näkymän objektivälilehti tulee näkyviin.
-
Kirjoita seuraava SQL-lauseke:
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.
Hakemiston luominen
Jos haluat luoda indeksin aiemmin luotuun taulukkoon, käytä CREATE INDEX -komentoa. CREATE INDEX -komennolla on seuraava syntaksi:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...]) [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Ainoat pakolliset elementit ovat CREATE INDEX -komento, indeksin nimi, ON-argumentti, indeksoitavien kenttien sisältävän taulukon nimi ja indeksiin sisällytettävien kenttien luettelo.
-
DESC-argumentti aiheuttaa indeksin luomisen laskevaan järjestykseen, mikä voi olla hyödyllistä, jos suoritat usein kyselyjä, jotka etsivät indeksoidusta kentästä ylintä arvoa tai jotka lajittelevat indeksoidut kentät laskevaan järjestykseen. Indeksi luodaan oletusarvoisesti nousevassa järjestyksessä.
-
WITH PRIMARY -argumentti määrittää indeksoidut kentät taulukon perusavain.
-
WITH DISALLOW NULL -argumentti aiheuttaa sen, että indeksi edellyttää, että indeksoidulle kentälle kirjoitetaan arvo eli tyhjäarvoja ei sallita.
Oletetaan, että sinulla on Autot-niminen taulukko, jossa on kentät, joihin tallennetaan ostettavien käytettyjen autojen nimi, vuosi, hinta ja kunto. Oletetaan myös, että taulukosta on tullut suuri ja että sisällytät usein vuosikentän kyselyihin. Voit luoda Vuosi-kenttään indeksin, jonka avulla kyselysi palauttavat tulokset nopeammin, noudattamalla seuraavia ohjeita:
-
Valitse Luo-välilehden Makrot ja koodi -ryhmässä Kyselyn rakennenäkymä.
-
Valitse Rakenne-välilehdenKyselytyyppi-ryhmästäTietomääritys.
Rakenneruudukko on piilotettu, ja SQL-näkymän objektivälilehti tulee näkyviin.
-
Kirjoita seuraava SQL-lauseke:
CREATE INDEX YearIndex ON Cars (Vuosi)
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.
Rajoitteen tai suhteen luominen
Rajoitus muodostaa loogisen ehdon, joka kentän tai kenttäyhdistelmän on täytettävä, kun arvoja lisätään. Esimerkiksi UNIQUE-rajoite estää rajoitettua kenttää hyväksymästä arvoa, joka monistaisi aiemmin luodun arvon kentälle.
Yhteys on rajoitetyyppi, joka viittaa toisen taulukon kentän tai kenttäyhdistelmän arvoihin sen määrittämiseksi, voidaanko arvo lisätä rajoitettuun kenttään vai kenttien yhdistelmään. Et käytä erityistä avainsanaa osoittamaan, että rajoitus on yhteys.
Voit luoda rajoituksen KÄYTTÄMÄLLÄ CONSTRAINT-lausetta CREATE TABLE- tai ALTER TABLE -komennossa. CONSTRAINT-lauseita on kahdenlaisia: toinen yhdelle kentälle rajoituksen luomiseen ja toinen rajoitusten luomiseen useille kentille.
Yhden kentän rajoitukset
Yhden kentän CONSTRAINT-lause seuraa välittömästi rajoittavan kentän määritelmää, ja sillä on seuraava syntaksi:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)] [ON UPDATE {CASCADE | SET NULL}] [ON DELETE {CASCADE | SET NULL}]}
Oletetaan, että sinulla on Autot-niminen taulukko, jossa on kentät, joihin tallennetaan ostettavien käytettyjen autojen nimi, vuosi, hinta ja kunto. Oletetaan myös, että unohdat usein antaa arvon auton kunnosta ja että haluat aina tallentaa nämä tiedot. Voit luoda Ehto-kenttään rajoituksen, joka estää sinua jättämästä kenttää tyhjäksi seuraavasti:
-
Valitse Luo-välilehden Makrot ja koodi -ryhmässä Kyselyn rakennenäkymä.
-
Valitse Rakenne-välilehdenKyselytyyppi-ryhmästäTietomääritys.
Rakenneruudukko on piilotettu, ja SQL-näkymän objektivälilehti tulee näkyviin.
-
Kirjoita seuraava SQL-lauseke:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.
Oletetaan, että jonkin ajan kuluttua huomaat, että Ehto-kentässä on monia samankaltaisia arvoja, joiden pitäisi olla samat. Esimerkiksi joidenkin autojen Kunto-arvo on heikko ja toisten arvo on huono.
Huomautus: Jos haluat seurata muita toimenpiteitä, lisää joitakin väärennettyjä tietoja Autot-taulukkoon, jonka loit edellisissä vaiheissa.
Kun olet puhdistanut arvot yhdenmukaisemmiksi, voit luoda carcondition-nimisen taulukon, jossa on yksi Ehto-niminen kenttä, joka sisältää kaikki arvot, joita haluat käyttää autojen kunnosta:
-
Valitse Luo-välilehden Makrot ja koodi -ryhmässä Kyselyn rakennenäkymä.
-
Valitse Rakenne-välilehdenKyselytyyppi-ryhmästäTietomääritys.
Rakenneruudukko on piilotettu, ja SQL-näkymän objektivälilehti tulee näkyviin.
-
Kirjoita seuraava SQL-lauseke:
CREATE TABLE CarCondition (ehtoTEKSTI(10))
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.
-
Perusavaimen luominen taulukolle ALTER TABLE -lausekkeen avulla:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Jos haluat lisätä Arvot Autot-taulukon Ehto-kentästä uuteen CarCondition-taulukkoon, kirjoita seuraava SQL SQL SQL-näkymän objektivälilehteen:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Huomautus: Tämän vaiheen SQL-lauseke on liittämiskysely. Toisin kuin tietojen määrityskysely, liittämiskyselyn lopussa on puolipiste.
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.
Yhteyden luominen rajoitteen avulla
Jos haluat, että kaikki Autot-taulukon Ehto-kenttään lisätyt uudet arvot vastaavat CarCondition-taulukon Ehto-kentän arvoa, voit luoda suhteen CarConditionin ja Autot-kentän välille Ehto-nimiseen kenttään seuraavasti:
-
Valitse Luo-välilehden Makrot ja koodi -ryhmässä Kyselyn rakennenäkymä.
-
Valitse Rakenne-välilehdenKyselytyyppi-ryhmästäTietomääritys.
Rakenneruudukko on piilotettu, ja SQL-näkymän objektivälilehti tulee näkyviin.
-
Kirjoita seuraava SQL-lauseke:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Ehto)
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.
Monikenttärajoitukset
Monikenttäistä CONSTRAINT-lausetta voi käyttää vain kentän määrityslausekkeen ulkopuolella, ja siinä on seuraava syntaksi:
CONSTRAINT constraint_name
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) | UNIQUE (unique1[, unique2[, ...]]) | NOT NULL (notnull1[, notnull2[, ...]]) | FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]]) REFERENCES foreign_table [(fk_field1[, fk_field2[, ...]])] | [ON UPDATE {CASCADE | SET NULL}] [ON DELETE {CASCADE | SET NULL}]}
Harkitse toista esimerkkiä, jossa käytetään Autot-taulukkoa. Oletetaan, että haluat varmistaa, että kahdella Autot-taulukon tietueella ei ole samoja arvoja nimille, vuosille, ehdoille ja hinnoille. Voit luoda yksilöllisen rajoituksen, joka koskee näitä kenttiä, noudattamalla seuraavia ohjeita:
-
Valitse Luo-välilehden Makrot ja koodi -ryhmässä Kyselyn rakennenäkymä.
-
Valitse Rakenne-välilehdenKyselytyyppi-ryhmästäTietomääritys.
Rakenneruudukko on piilotettu, ja SQL-näkymän objektivälilehti tulee näkyviin.
-
Kirjoita seuraava SQL-lauseke:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (nimi, vuosi, ehto, hinta)
-
Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.