Galite kurti ir modifikuoti lenteles, apribojimus, indeksus ir ryšius "Access" rašydami duomenų aprašo užklausas SQL rodinyje. Šiame straipsnyje aiškinamos duomenų aprašų užklausos ir kaip jas naudoti kuriant lenteles, apribojimus, indeksus ir ryšius. Šis straipsnis taip pat padės nuspręsti, kada naudoti duomenų aprašo užklausą.
Šiame straipsnyje:
Apžvalga
Skirtingai nei kitos "Access" užklausos, duomenų aprašo užklausos nenuskaito duomenų. Vietoj to duomenų aprašo užklausos naudoja duomenų aprašų kalbą duomenų bazės objektams kurti, modifikuoti arba naikinti.
Pastaba
Duomenų apibrėžimo kalba (DDL) yra Struktūrinių užklausų kalbos (SQL) dalis.
Duomenų aprašo užklausos gali būti labai patogios. Galite reguliariai naikinti ir iš naujo sukurti duomenų bazės schemos dalis tiesiog vykdydami kelias užklausas. Jei esate susipažinę su SQL sakiniais ir planuojate naikinti ir iš naujo sukurti tam tikras lenteles, apribojimus, indeksus ar ryšius, apsvarstykite galimybę naudoti duomenų aprašo užklausą.
Įspėjimas
Duomenų aprašų užklausų naudojimas duomenų bazės objektams modifikuoti gali būti rizikingas, nes veiksmai nėra pateikiami kartu su patvirtinimo dialogo langais. Suklydę galite prarasti duomenis arba netyčia pakeisti lentelės dizainą. Būkite atsargūs naudodami duomenų aprašo užklausą duomenų bazės objektams modifikuoti. Jei nesate atsakingas už naudojamos duomenų bazės priežiūrą, prieš vykdydami duomenų aprašo užklausą turėtumėte pasitarti su duomenų bazės administratoriumi.
Svarbu
Prieš vykdydami duomenų aprašo užklausą, sukurkite visų susijusių lentelių atsarginę kopiją.
DDL raktažodžiai
| Raktažodis | Naudokite |
|---|---|
| CREATE | Sukurkite indeksą arba lentelę, kuri dar nesukurta. |
| ALTER | Modifikuokite esamą lentelę arba stulpelį. |
| DROP | Panaikinkite esamą lentelę, stulpelį arba apribojimą. |
| ADD | Stulpelio arba apribojimo įtraukimas į lentelę. |
| COLUMN | Naudoti su ADD, ALTER arba DROP |
| CONSTRAINT | Naudoti su ADD, ALTER arba DROP |
| INDEX | Naudoti su CREATE |
| TABLE | Naudokite su ALTER, CREATE arba DROP |
Lentelės kūrimas arba modifikavimas
Lentelei sukurti naudokite komandą CREATE TABLE. Komandą Kurti lentelę sudaro tokia sintaksė:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])
Vieninteliai būtini komandos CREATE TABLE elementai yra pati komanda CREATE TABLE ir lentelės pavadinimas, bet paprastai norėsite apibrėžti kai kuriuos laukus ar kitus lentelės aspektus. Apsvarstykite šį paprastą pavyzdį.
Tarkime, kad norite sukurti lentelę, kurioje saugotumėte naudotų automobilių, kuriuos ketinate įsigyti, pavadinimą, metus ir kainą. Norite leisti iki 30 simbolių pavadinime ir 4 simbolius metuose. Norėdami naudoti duomenų aprašo užklausą lentelei sukurti, atlikite šiuos veiksmus:
Pastaba
Norint vykdyti duomenų aprašo užklausą, pirmiausia gali reikėti įgalinti duomenų bazės turinį:
- Pranešimų juostoje spustelėkite Įgalinti turinį.
Lentelės kūrimas
- Skirtuko Kūrimas grupėje Makrokomandos & kodas spustelėkite Užklausos dizainas.
- Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Duomenų apibrėžimas.
Dizaino tinklelis paslėptas ir rodomas SQL rodinio objektų skirtukas. - Įveskite šį SQL sakinį:
SUKURTI LENTELĘ Automobiliai (Vardas TEXT(30), Metai TEXT(4), Kaina VALIUTA) - Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Lentelės modifikavimas
Norėdami modifikuoti lentelę, naudokite komandą ALTER TABLE. Galite naudoti komandą ALTER TABLE, kad įtrauktumėte, modifikuotumėte arba pašalintumėte (pašalintumėte) stulpelius ar apribojimus. Komanda ALTER TABLE sudaryta iš šios sintaksės:
ALTER TABLE table_name predicate
kur taisyklės sąlyga gali būti bet kuri iš šių:
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Tarkime, kad norite įtraukti 10 simbolių teksto lauką, kuriame būtų saugoma informacija apie kiekvieno automobilio būklę. Tai galite atlikti taip:
- Skirtuko Kūrimas grupėje Makrokomandos & kodas spustelėkite Užklausos dizainas.
- Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Duomenų apibrėžimas.
Dizaino tinklelis paslėptas ir rodomas SQL rodinio objektų skirtukas. - Įveskite šį SQL sakinį:
ALTER TABLE Automobiliai ADD COLUMN Sąlygos TEKSTAS(10) - Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Rodyklės kūrimas
Norėdami sukurti esamos lentelės indeksą, naudokite komandą CREATE INDEX. Komanda CREATE INDEX sudaryta iš šios sintaksės:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Vieninteliai būtini elementai yra komanda CREATE INDEX, indekso pavadinimas, ON argumentas, lentelės, kurioje yra laukai, kuriuos norite įtraukti į indeksą, pavadinimas ir laukų, įtrauktinų į indeksą, sąrašas.
- Dėl DESC argumento indeksas kuriamas mažėjančia tvarka, o tai gali būti naudinga, jei dažnai vykdote užklausas, kurios ieško didžiausių indeksuoto lauko reikšmių arba rikiuoja indeksuotą lauką mažėjimo tvarka. Pagal numatytuosius parametrus indeksas kuriamas didėjančia tvarka.
- Argumentas WITH PRIMARY nustato indeksuotą lauką arba laukus kaip pirminį lentelės raktą.
- Dėl argumento WITH DISALLOW NULL indeksas reikalauja įvesti į indeksą įtraukto lauko reikšmę, t. y. neapibrėžtos reikšmės neleidžiamos.
Tarkime, kad turite lentelę pavadinimu Automobiliai su laukais, kuriuose saugomas naudotų automobilių, kuriuos ketinate įsigyti, pavadinimai, metai, kaina ir būklė. Taip pat tarkime, kad lentelė tapo didelė ir jūs dažnai įtraukiate lauką year į užklausas. Kad jūsų užklausos greičiau pateiktų rezultatus, galite sukurti lauko Metai indeksą:
- Skirtuko Kūrimas grupėje Makrokomandos & kodas spustelėkite Užklausos dizainas.
- Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Duomenų apibrėžimas.
Dizaino tinklelis paslėptas ir rodomas SQL rodinio objektų skirtukas. - Įveskite šį SQL sakinį:
CREATE INDEX YearIndex ON Cars (Year) - Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Apribojimo arba ryšio kūrimas
Apribojimas nustato loginę sąlygą, kurią laukas arba laukų derinys turi atitikti, kai įterpiamos reikšmės. Pavyzdžiui, UNIQUE apribojimas neleidžia apribotam laukui priimti reikšmės, kuri galėtų dubliuoti esamą lauko reikšmę.
Ryšys yra tam tikro tipo apribojimas, kuris nurodo kitos lentelės lauko arba laukų derinio reikšmes, kad nustatytų, ar reikšmę galima įterpti į apribotą lauką ar laukų derinį. Nenaudojate specialaus raktažodžio norėdami nurodyti, kad apribojimas yra ryšys.
Norėdami sukurti apribojimą, naudokite sąlygą CONSTRAINT komandoje CREATE TABLE arba ALTER TABLE. Yra dviejų rūšių CONSTRAINT sąlygos: viena naudojama kuriant vieno lauko apribojimą, o kita – kelių laukų apribojimą.
Vieno lauko apribojimai
Vieno lauko sąlyga CONSTRAINT iš karto atitinka apriboto lauko apibrėžimą ir turi tokią sintaksę:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Tarkime, kad turite lentelę pavadinimu Automobiliai su laukais, kuriuose saugomas naudotų automobilių, kuriuos ketinate įsigyti, pavadinimai, metai, kaina ir būklė. Taip pat tarkime, kad dažnai pamirštate įvesti automobilio būklės reikšmę ir visada norite įrašyti šią informaciją. Galite sukurti lauko Sąlyga apribojimą, kuris neleidžia palikti lauko tuščio, naudodami šią procedūrą:
- Skirtuko Kūrimas grupėje Makrokomandos & kodas spustelėkite Užklausos dizainas.
- Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Duomenų apibrėžimas.
Dizaino tinklelis paslėptas ir rodomas SQL rodinio objektų skirtukas. - Įveskite šį SQL sakinį:
ALTER TABLE Automobiliai ALTER COLUMN Sąlyga TEKSTO APRIBOJIMAS ConditionRequired NOT NULL - Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Tarkime, kad po kiek laiko pastebėsite, kad lauke Sąlyga yra daug panašių reikšmių, kurios turėtų sutapti. Pavyzdžiui, kai kurių automobilių būklės vertė yra prasta , o kitų – bloga.
Pastaba
Jei norite atlikti likusias procedūras, į lentelę Automobiliai, kurią sukūrėte atlikdami ankstesnius veiksmus, įtraukite netikrų duomenų.
Išvalę reikšmes, kad jos būtų nuoseklesnės, galite sukurti lentelę pavadinimu Automobilio būklė su vienu lauku pavadinimu Būklė, kuriame yra visos reikšmės, kurias norite naudoti automobilių būklei nustatyti:
Skirtuko Kūrimas grupėje Makrokomandos & kodas spustelėkite Užklausos dizainas.
Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Duomenų apibrėžimas.
Dizaino tinklelis paslėptas ir rodomas SQL rodinio objektų skirtukas.Įveskite šį SQL sakinį:
CREATE TABLE CarCondition (Condition TEXT(10))Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Sukurkite pirminį lentelės raktą naudodami sakinį ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Sąlygos TEKSTO APRIBOJIMAS CarConditionPK PIRMINIS RAKTASNorėdami įterpti reikšmes iš lentelės Automobiliai lauko Sąlyga į naują lentelę Automobilių būklė, SQL rodinio objektų skirtuke įveskite šį SQL:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;Pastaba
Šio veiksmo SQL sakinys yra papildymo užklausa. Kitaip nei duomenų aprašo užklausa, papildymo užklausa baigiasi kabliataškiu.
Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Ryšio kūrimas naudojant apribojimą
Jei norite, kad bet kuri nauja reikšmė, įterpta lentelės Automobiliai lauke Sąlyga, atitiktų lauko Būklė reikšmę lentelėje Būklė, tada lauke Būklė galite sukurti ryšį tarp automobilio būklės ir automobilių naudodami šią procedūrą:
- Skirtuko Kūrimas grupėje Makrokomandos & kodas spustelėkite Užklausos dizainas.
- Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Duomenų apibrėžimas.
Dizaino tinklelis paslėptas ir rodomas SQL rodinio objektų skirtukas. - Įveskite šį SQL sakinį:
ALTER TABLE Automobiliai ALTER COLUMN Sąlygos teksto APRIBOJIMAS FKeyCondition REFERENCES CarCondition (Condition) - Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Kelių laukų apribojimai
Kelių laukų sąlyga CONSTRAINT gali būti naudojama tik už lauko apibrėžimo sąlygos ribų ir turi tokią sintaksę:
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}]}
Panagrinėkime kitą pavyzdį, kuriame naudojama lentelė Automobiliai. Tarkime, norite būti tikri, kad jokie du įrašai lentelėje Automobiliai neturėtų to paties rinkinio – Pavadinimas, Metai, Būsena ir Kaina. Galima sukurti šiems laukams taikomą UNIKALŲ apribojimą naudojant šią procedūrą:
- Skirtuko Kūrimas grupėje Makrokomandos & kodas spustelėkite Užklausos dizainas.
- Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Duomenų apibrėžimas.
Dizaino tinklelis paslėptas ir rodomas SQL rodinio objektų skirtukas. - Įveskite šį SQL sakinį:
ALTER TABLE Automobiliai ADD CONSTRAINT NoDupes UNIQUE (pavadinimas, metai, būklė, kaina) - Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.