Tabulky, omezení, indexy a relace můžete v Accessu vytvářet a upravovat zápisem dotazů na definice dat v zobrazení SQL. Tento článek vysvětluje dotazy na definice dat a jejich použití k vytváření tabulek, omezení, indexů a relací. Tento článek vám taky pomůže rozhodnout se, kdy použít definiční dotaz.
V tomto článku
Přehled
Na rozdíl od jiných dotazů Accessu nenačítá data definiční dotaz. Místo toho používá definiční dotaz k vytvoření, úpravám nebo odstranění databázových objektů jazyk DDB (Data Definition Language).
Poznámka: Jazyk DDL (Data Definition Language) je součástí jazyka SQL (Structured Query Language).
Definice dotazů na data může být velmi pohodlná. Části schématu databáze můžete pravidelně odstraňovat a znovu vytvářet, pouze spouš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í dotazu.
Upozornění: Používání definic dat k úpravě databázových objektů může být riziko, protože akce doprovází potvrzovací dialogová okna. Pokud dojde k chybě, můžete přijít o data nebo neúmyslně změnit návrh tabulky. Při úpravách objektů v databázi pomocí definiční dotazu na data buďte opatrní. Pokud za udržování databáze, kterou používáte, nezonesete zodpovědnost, měli byste se před spuštěním definiční dotazu obrátit na správce databáze.
Důležité informace: Před spuštěním dotazu na definici dat vytvořte záložní kopii všech tabulek, které jsou součástí dotazu na definici dat.
Klíčová slova DDL
Klíčové slovo |
Použití |
CREATE |
Vytvořte index nebo tabulku, které ještě neexistují. |
ALTER |
Upravte existující tabulku nebo sloupec. |
DROP |
Odstranění existující tabulky, sloupce nebo omezení |
ADD |
Přidejte do tabulky sloupec nebo omezení. |
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é povinné prvky příkazu CREATE TABLE jsou samotný příkaz CREATE TABLE a název tabulky, ale většinou budete chtít definovat některá pole nebo jiné aspekty tabulky. Vezměte v úvahu tento jednoduchý příklad.
Předpokládejme, že chcete vytvořit tabulku pro uložení názvu, roku a ceny použitých automobilů, o které uvažujete. Chcete povolit až 30 znaků názvu a 4 znaky pro tento rok. Když chcete k vytvoření tabulky použít definiční dotaz na data, proveďte následující kroky:
Poznámka: Aby se mohl spustit definiční dotaz, budete možná muset nejdřív povolit obsah databáze:
-
Na panelu zpráv klikněte na Povolit obsah.
Vytvoření tabulky
-
On the Create tab, in the Macros & Code group, click Query Design.
-
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 tento 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
Pokud chcete tabulku upravit, použijte příkaz ALTER TABLE. Pomocí příkazu ALTER TABLE můžete přidat, upravit nebo odebrat (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 kterýkoli z následujících kroků:
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 textové pole s 10 znaky, do kterého uložíte informace o stavu každého auta. Můžete udělat toto:
-
On the Create tab, in the Macros & Code group, click Query Design.
-
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 tento 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 u existující tabulky, 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é povinné prvky jsou příkaz CREATE INDEX, název indexu, argument ON, název tabulky obsahující pole, která chcete indexovat, a seznam polí, která se mají zahrnout do indexu.
-
Argument DESC způsobí, že index se vytvoří v sestupném pořadí, což může být užitečné v případě, že často spouštějíte dotazy, které hledáte nejvyšší hodnoty pro indexované pole, nebo že indexované pole seřadí v sestupném pořadí. Ve výchozím nastavení je index vytvořen ve vzestupném pořadí.
-
Argument WITH PRIMARY určuje indexovaná pole jako Primární klíč tabulky.
-
Argument WITH DISALLOW NULL způsobuje, že index vyžaduje zadání hodnoty pro indexované pole – to znamená, že nejsou povolené hodnoty Null.
Předpokládejme, že máte tabulku s názvem Auta s poli, ve které se nachází název, rok, cena a stav použitých automobilů, o které uvažujete. Předpokládejme také, že tabulka byla velká a že do dotazů často zahrňte pole pro rok. 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:
-
On the Create tab, in the Macros & Code group, click Query Design.
-
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 tento 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í určuje logickou podmínku, kterou musí pole nebo kombinace polí splňovat při vložení hodnot. Například omezení UNIQUE brání poli s omezením v přijetí hodnoty, která by duplikuje existující hodnotu pole.
Relace je typ omezení, který odkazuje na hodnoty pole nebo kombinace polí v jiné tabulce, a určuje tak, zda lze hodnotu vložit do pole s omezením nebo kombinace polí. Speciální klíčové slovo se nepoužívejte k označení, že je omezení relace.
Pokud chcete vytvořit omezení, použijte klauzuli CONSTRAINT v příkazu CREATE TABLE nebo ALTER TABLE. Klauzule CONSTRAINT má dva typy: jeden pro vytvoření omezení u jednoho pole a druhý pro vytvoření omezení u více polí.
Omezení jednoho pole
Klauzule CONSTRAINT pro jedno pole bezprostředně následuje za definicí pole, které toto omezení 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, ve které se nachází název, rok, cena a stav použitých automobilů, o které uvažujete. Předpokládejme také, že často zapomenete zadat hodnotu podmínky auta a že vždy chcete tyto informace zaznamenat. Pomocí následujícího postupu můžete vytvořit omezení pro pole Podmínka, které brání v opuštění pole prázdného:
-
On the Create tab, in the Macros & Code group, click Query Design.
-
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 tento 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.
Nyní předpokládejme, že po chvíli zjistíte, že pole Podmínka obsahuje mnoho podobných hodnot, které by měly být stejné. Například některé auta mají špatný stav a jiné mají špatný stav.
Poznámka: Pokud chcete postupovat společně se zbývajícími postupy, přidejte do tabulky Automobilů, kterou jste vytvořili v předchozích krocích, několik falešných dat.
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á bude obsahovat všechny hodnoty, které chcete použít pro podmínku automobilů:
-
On the Create tab, in the Macros & Code group, click Query Design.
-
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 tento příkaz SQL:
CREATE TABLE CarCondition (podmínka TEXT(10))
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
-
Vytvoření primárního klíče tabulky pomocí příkazu ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Pokud chcete do nové tabulky CarCondition vložit hodnoty z pole Podmínka v tabulce Auta, 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 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 požadovat, aby nová hodnota vložená do pole Podmínka v tabulce Auty odpovídala hodnotě pole Podmínka v tabulce CarCondition, můžete pak pomocí následujícího postupu vytvořit relaci mezi podmínkami CarCondition a Auty v poli s názvem Podmínka:
-
On the Create tab, in the Macros & Code group, click Query Design.
-
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 tento 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í:
Klauzule CONSTRAINT pro více polí se může použít jenom mimo klauzuli definice pole s následující syntaxí:
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}]}
Vezměte v úvahu další příklad, který používá tabulku Auta. Předpokládejme, že chcete mít jistotu, že žádné dva záznamy v tabulce Auty nemají stejnou sadu hodnot pro název, rok, podmínku a cenu. Omezení UNIQUE, které se vztahuje k těmto polím, můžete vytvořit pomocí následujícího postupu:
-
On the Create tab, in the Macros & Code group, click Query Design.
-
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 tento příkaz SQL:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (název, rok, podmínka, cena)
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.