Tabulky, omezení, indexy a relace v Accessu můžete vytvářet a upravovat zápisem dotazů na definici dat v zobrazení SQL. Tento článek vysvětluje dotazy na definici dat a jejich použití k vytváření tabulek, omezení, indexů a relací. Tento článek vám také může pomoct při rozhodování, kdy použít dotaz definice dat.
V tomto článku
Přehled
Na rozdíl od jiných dotazů Accessu dotaz definice dat nenačítá data. Místo toho dotaz definice dat používá k vytváření, úpravám nebo odstraňování databázových objektů jazyk definice dat.
Poznámka: Jazyk DDL (Data Definition Language) je součástí jazyka SQL (Structured Query Language).
Dotazy na definici dat mohou být velmi pohodlné. Části schématu databáze můžete pravidelně odstraňovat a znovu vytvářet pouze spuštěním některých dotazů. Pokud znáte příkazy SQL a plánujete odstranit a znovu vytvořit konkrétní tabulky, omezení, indexy nebo relace, zvažte použití definičního dotazu na data.
Upozornění: Použití dotazů na definici dat k úpravě databázových objektů může být riskantní, protože akce nejsou doprovázeny potvrzovacími dialogovými okny. Pokud uděláte chybu, můžete ztratit data nebo neúmyslně změnit návrh tabulky. Při použití dotazu definice dat k úpravě objektů v databázi buďte opatrní. Pokud nejste zodpovědní za údržbu databáze, kterou používáte, měli byste se před spuštěním dotazu na definici dat poradit se správcem databáze.
Důležité informace: Před spuštěním dotazu definice dat vytvořte záložní kopii všech tabulek.
Klíčová slova DDL
Klíčové slovo |
Použití |
CREATE |
Vytvořte index nebo tabulku, která ještě neexistuje. |
ALTER |
Úprava existující tabulky nebo sloupce |
DROP |
Odstraňte existující tabulku, sloupec nebo omezení. |
ADD |
Přidání sloupce nebo omezení do tabulky |
COLUMN |
Použití s funkcemi ADD, ALTER nebo DROP |
CONSTRAINT |
Použití s funkcemi ADD, ALTER nebo DROP |
INDEX |
Použití s create |
TABLE |
Použití s funkcemi ALTER, CREATE nebo DROP |
Vytvoření nebo úprava tabulky
K vytvoření tabulky použijte příkaz CREATE TABLE. Příkaz CREATE TABLE má následující syntaxi:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...][, CONSTRAINT constraint1 [, ...]])
Jediné požadované prvky příkazu CREATE TABLE jsou samotný příkaz CREATE TABLE a název tabulky, ale obvykle budete chtít definovat některá pole nebo jiné aspekty tabulky. Podívejte se na tento jednoduchý příklad.
Předpokládejme, že chcete vytvořit tabulku s názvem, rokem a cenou ojetých vozů, které zvažujete k nákupu. Chcete povolit maximálně 30 znaků pro název a 4 znaky pro rok. Pokud chcete k vytvoření tabulky použít dotaz definice dat, postupujte takto:
Poznámka: Možná budete muset nejdřív povolit obsah databáze, aby se spustil dotaz na definici dat:
-
Na panelu zpráv klikněte na Povolit obsah.
Vytvoření tabulky
-
Na kartě Vytvořit klikněte ve skupině Makra & Kód na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na definice dat.
Návrhová mřížka je skrytá a zobrazí se karta objektu zobrazení SQL.
-
Zadejte následující příkaz SQL:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Změna tabulky
K úpravě tabulky použijte příkaz ALTER TABLE. Pomocí příkazu ALTER TABLE můžete přidat, upravit nebo odstranit (odebrat) sloupce nebo omezení. Příkaz ALTER TABLE má následující syntaxi:
ALTER TABLE table_name predicate
kde predikát může být některý z následujících:
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Předpokládejme, že chcete přidat 10mísedné textové pole, do kterého se budou ukládat informace o stavu každého auta. Můžete udělat toto:
-
Na kartě Vytvořit klikněte ve skupině Makra & Kód na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na definice dat.
Návrhová mřížka je skrytá a zobrazí se karta objektu zobrazení SQL.
-
Zadejte následující příkaz SQL:
ALTER TABLE Cars ADD COLUMN Condition TEXT(10)
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Vytvoření rejstříku
Pokud chcete vytvořit index pro existující tabulku, použijte příkaz CREATE INDEX. Příkaz CREATE INDEX má následující syntaxi:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...]) [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Jedinými povinnými prvky jsou příkaz CREATE INDEX, název indexu, argument ON, název tabulky obsahující pole, která chcete indexovat, a seznam polí, která mají být zahrnuta do indexu.
-
Argument DESC způsobí, že se index vytvoří v sestupném pořadí, což může být užitečné, pokud často spouštíte dotazy, které hledají nejvyšší hodnoty indexovaného pole nebo seřadí indexované pole v sestupném pořadí. Ve výchozím nastavení se index vytváří ve vzestupném pořadí.
-
Argument WITH PRIMARY vytvoří indexované pole nebo pole jako Primární klíč tabulky.
-
Argument WITH DISALLOW NULL způsobí, že index vyžaduje zadání hodnoty pro indexované pole – to znamená, že hodnoty null nejsou povoleny.
Předpokládejme, že máte tabulku s názvem Auta s poli obsahujícími název, rok, cenu a stav ojetých aut, která zvažujete k nákupu. Předpokládejme také, že se tabulka stala velkou a že do dotazů často zahrnete pole year. Pomocí následujícího postupu můžete vytvořit index v poli Rok, který vašim dotazům pomůže rychleji vracet výsledky:
-
Na kartě Vytvořit klikněte ve skupině Makra & Kód na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na definice dat.
Návrhová mřížka je skrytá a zobrazí se karta objektu zobrazení SQL.
-
Zadejte následující příkaz SQL:
CREATE INDEX YearIndex on Cars (Year)
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Vytvoření omezení nebo relace
Omezení stanoví logickou podmínku, kterou musí pole nebo kombinace polí splňovat při vkládání hodnot. Například omezení UNIQUE brání omezenému poli v přijetí hodnoty, která by duplikovala existující hodnotu pole.
Relace je typ omezení, které odkazuje na hodnoty pole nebo kombinace polí v jiné tabulce a určuje, zda lze hodnotu vložit do omezeného pole nebo kombinace polí. K označení, že omezení je relace, nepoužíváte speciální klíčové slovo.
K vytvoření omezení použijte klauzuli CONSTRAINT v příkazu CREATE TABLE nebo ALTER TABLE. Existují dva typy klauzulí CONSTRAINT: jedna pro vytvoření omezení pro jedno pole a druhá pro vytvoření omezení pro více polí.
Omezení jednoho pole
Klauzule CONSTRAINT s jedním polem okamžitě následuje za definicí pole, které omezuje, a má následující syntaxi:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)] [ON UPDATE {CASCADE | SET NULL}] [ON DELETE {CASCADE | SET NULL}]}
Předpokládejme, že máte tabulku s názvem Auta s poli obsahujícími název, rok, cenu a stav ojetých aut, která zvažujete k nákupu. Předpokládejme také, že často zapomínáte zadat hodnotu stavu vozu a že tyto informace chcete vždy zaznamenat. Pomocí následujícího postupu můžete vytvořit omezení pole Podmínka, které vám zabrání nechat pole prázdné:
-
Na kartě Vytvořit klikněte ve skupině Makra & Kód na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na definice dat.
Návrhová mřížka je skrytá a zobrazí se karta objektu zobrazení SQL.
-
Zadejte následující příkaz SQL:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Teď předpokládejme, že po nějaké době zjistíte, že v poli Podmínka existuje mnoho podobných hodnot, které by měly být stejné. Některá auta mají například stavovou hodnotu chudá a jiná mají hodnotu špatnou.
Poznámka: Pokud chcete postupovat podle zbývajících postupů, přidejte do tabulky Auta, kterou jste vytvořili v předchozích krocích, nějaká falešná data.
Po vyčištění hodnot tak, aby byly konzistentnější, můžete vytvořit tabulku s názvem CarCondition s jedním polem s názvem Podmínka, která obsahuje všechny hodnoty, které chcete použít pro stav aut:
-
Na kartě Vytvořit klikněte ve skupině Makra & Kód na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na definice dat.
Návrhová mřížka je skrytá a zobrazí se karta objektu zobrazení SQL.
-
Zadejte následující příkaz SQL:
CREATE TABLE CarCondition (Text podmínky(10))
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
-
Vytvořte primární klíč pro tabulku pomocí příkazu ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMÁRNÍ KLÍČ
-
Pokud chcete vložit hodnoty z pole Podmínka tabulky Auta do nové tabulky CarCondition, zadejte na kartu objektu zobrazení SQL následující kód SQL:
INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;
Poznámka: Příkaz SQL v tomto kroku je Přidávací dotaz. Na rozdíl od definičního dotazu dat končí přidávací dotaz středníkem.
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Vytvoření relace pomocí omezení
Pokud chcete vyžadovat, aby nová hodnota vložená do pole Podmínka tabulky Auta odpovídala hodnotě pole Podmínka v tabulce CarCondition, můžete vytvořit relaci mezi CarCondition a Cars v poli s názvem Podmínka pomocí následujícího postupu:
-
Na kartě Vytvořit klikněte ve skupině Makra & Kód na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na definice dat.
Návrhová mřížka je skrytá a zobrazí se karta objektu zobrazení SQL.
-
Zadejte následující příkaz SQL:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Podmínka)
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Omezení více polí
Klauzuli CONSTRAINT s více poli lze použít pouze mimo klauzuli definice pole a má následující syntaxi:
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}]}
Podívejte se na další příklad, který používá tabulku Auta. Předpokládejme, že chcete zajistit, aby žádné dva záznamy v tabulce Auta neměly stejnou sadu hodnot pro Název, Rok, Podmínku a Cenu. Pomocí následujícího postupu můžete vytvořit omezení UNIQUE, které se vztahuje na tato pole:
-
Na kartě Vytvořit klikněte ve skupině Makra & Kód na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na definice dat.
Návrhová mřížka je skrytá a zobrazí se karta objektu zobrazení SQL.
-
Zadejte následující příkaz SQL:
ALTER TABLE Auta ADD CONSTRAINT NoDupes UNIQUE (název, rok, podmínka, cena)
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.