Tabulky, omezení, indexy a relace můžete v Accessu vytvářet a upravovat tím, že budete psát definiční dotazy v zobrazení SQL. Tento článek vysvětluje definiční dotazy a jejich použití k vytváření tabulek, omezení, indexů a relací. Tento článek vám taky pomůže při rozhodování, kdy použít definiční dotaz.
V tomto článku
Přehled
Na rozdíl od jiných accessových dotazů definiční dotaz nenačítá data. Místo toho definiční dotaz používá jazyk Data Definition Language k vytvoření, úpravě nebo odstranění databázových objektů.
Poznámka
Součástí jazyka jazyk SQL (Structured Query Language) (SQL) je jazyk DDL (Data Definition Language).
Definiční dotazy mohou být velice praktické. Části schématu databáze můžete pravidelně odstraňovat a znovu vytvářet pouhým spuštěním několika dotazů. Použití definičního dotazu zvažte v případě, že znáte příkazy SQL a máte v úmyslu odstranit a znovu vytvořit určité tabulky, omezení, indexy nebo relace.
Varování
Použití definičních dotazů 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 přijít o data nebo neúmyslně změnit návrh tabulky. Při úpravách objektů v databázi pomocí definičního dotazu buďte opatrní. Pokud nezodpovídáte za údržbu databáze, kterou používáte, měli byste se před spuštěním definičního dotazu poradit se správcem databáze.
Důležité
Před spuštěním definičního dotazu vytvořte záložní kopii všech zahrnutých tabulek.
Klíčová slova DDL
| Klíčové slovo | Použití |
|---|---|
| CREATE | Vytvořte index nebo tabulku, které ještě neexistují. |
| ALTER | Úprava existující tabulky nebo sloupce |
| DROP | Odstraní existující tabulku, sloupec nebo omezení. |
| ADD | Přidejte do tabulky sloupec nebo omezení. |
| COLUMN | Používá se s příkazem ADD, ALT nebo DROP |
| CONSTRAINT | Používá se s příkazem ADD, ALT nebo DROP |
| INDEX | Použití s příkazem CREATE |
| TABLE | Použijte s příkazem ALTER, CREATE nebo DROP |
Vytvoření nebo úprava tabulky
Tabulku vytvoříte příkazem 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ými povinnými 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. Vezměme si tento jednoduchý příklad.
Předpokládejme, že chcete vytvořit tabulku pro ukládání názvu, roku a ceny ojetých vozů, které zvažujete koupit. Chcete povolit maximálně 30 znaků pro název a 4 znaky pro rok. Chcete-li k vytvoření tabulky použít definiční dotaz, postupujte takto:
Poznámka
Aby se mohl spustit definiční dotaz, bude pravděpodobně nutné nejdřív povolit obsah databáze:
- Na panelu zpráv klikněte na Povolit obsah.
Vytvoření tabulky
- Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko 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:
VYTVOŘIT STOLNÍ vozy (Název TEXT(30), Rok TEXT(4), Cena MĚNA) - Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Změna tabulky
Tabulku můžete upravit příkazem ALTER TABLE. Pomocí příkazu ALTER TABLE můžete přidat, upravit nebo odstranit (odebrat) sloupce nebo vazby. Příkaz ALTER TABLE má následující syntaxi:
ALTER TABLE table_name predicate
kde predikát může být kterýkoliv 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 10znakové textové pole pro uložení informací o stavu každého vozu. Můžete udělat toto:
- Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko 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 Podmínka TEXT(10) - Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Vytvoření rejstříku
K vytvoření indexu 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ými požadovaný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á se mají do indexu zahrnout.
- 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 pokud řadíte indexované pole v sestupném pořadí. Ve výchozím nastavení je index vytvořen ve vzestupném pořadí.
- Argument WITH PRIMARY vytvoří indexované pole jako primární klíč tabulky.
- Argument WITH DISALLOW NULL způsobí, že index bude vyžadovat zadání hodnoty do indexovaného pole – to znamená, že hodnoty null nejsou povoleny.
Předpokládejme, že máte tabulku s názvem Auta s poli, která ukládají název, rok, cenu a stav ojetých vozů, které zvažujete koupit. Také předpokládejme, že se tabulka rozrostla a že do dotazů často zahrnujete pole roku. Pomocí následujícího postupu můžete vytvořit index pole Rok, který vašim dotazům usnadní vracení výsledků rychleji:
- Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko 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 (rok) - 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í při vložení hodnot splňovat. Omezení UNIQUE například zabraňuje tomu, aby omezené pole přijalo hodnotu, která by duplikovala existující hodnotu pole.
Relace je typ omezení, které odkazuje na hodnoty pole nebo kombinace polí v jiné tabulce s cílem určit, zda je možné do omezeného pole nebo kombinace polí vložit hodnotu. Omezením jako relací není speciální klíčové slovo.
Pokud chcete vytvořit omezení, použijete 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 tvořená jedním polem následuje bezprostředně 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, která ukládají název, rok, cenu a stav ojetých vozů, které zvažujete koupit. Předpokládejme také, že často zapomínáte zadat hodnotu stavu vozidla a že chcete tyto informace vždy zaznamenávat. Pomocí následujícího postupu můžete u pole Podmínka vytvořit omezení, které vám zabrání v tom, aby pole zůstalo prázdné:
- Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko 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.
Nyní předpokládejme, že po nějaké době zjistíte, že v poli Podmínka je mnoho podobných hodnot, které by měly být stejné. Například některá auta mají hodnotu stavu špatný a jiná hodnotu špatný.
Poznámka
Pokud chcete pokračovat ve zbývajících postupech, přidejte do tabulky Cars vytvořené v předchozích krocích falešné údaje.
Po vyčištění hodnot tak, aby byly konzistentnější, byste mohli vytvořit tabulku s názvem CarCondition s jedním polem s názvem Condition, které bude obsahovat všechny hodnoty, které chcete použít pro stav automobilů:
Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko 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 (Podmínka TEXT(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 PRIMARY KEYPokud chcete vložit hodnoty z pole Podmínka v tabulce 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 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í
Chcete-li požadovat, aby všechny nové hodnoty vložené do pole Podmínka v tabulce Vozy odpovídaly hodnotě pole Podmínka v tabulce VůzStav, můžete následujícím postupem vytvořit relaci mezi poli Stav vozidla a Vozy s názvem Podmínka:
- Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko 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}]}
Vezměme si další příklad, který používá tabulku Auta. Předpokládejme, že chcete zajistit, aby žádné dva záznamy v tabulce Cars (Auta) neobsahovaly stejnou sadu hodnot pro pole Name, Year, Condition (Stav) a Price. Následujícím postupem můžete vytvořit omezení typu UNIQUE, které se bude vztahovat na tato pole:
- Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko 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 CONSTRAINT NoDupes UNIQUE (název, rok, stav, cena) - Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.