Vytvoření nebo úprava tabulek nebo indexů pomocí definičního dotazu

Platí pro
Access pro Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

Začátek stránky

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

  1. Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko Návrh dotazu.
  2. 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.
  3. Zadejte následující příkaz SQL:
    VYTVOŘIT STOLNÍ vozy (Název TEXT(30), Rok TEXT(4), Cena MĚNA)
  4. 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:

  1. Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko Návrh dotazu.
  2. 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.
  3. Zadejte následující příkaz SQL:
    ALTER TABLE Cars ADD COLUMN Podmínka TEXT(10)
  4. Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.

Začátek stránky

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:

  1. Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko Návrh dotazu.
  2. 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.
  3. Zadejte následující příkaz SQL:
    CREATE INDEX YearIndex ON Cars (rok)
  4. Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.

Začátek stránky

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é:

  1. Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko Návrh dotazu.
  2. 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.
  3. Zadejte následující příkaz SQL:
    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL
  4. 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ů:

  1. Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko Návrh dotazu.

  2. 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.

  3. Zadejte následující příkaz SQL:
    CREATE TABLE CarCondition (Podmínka TEXT(10))

  4. Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.

  5. Vytvořte primární klíč pro tabulku pomocí příkazu ALTER TABLE:
    ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

  6. Pokud 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.

  7. 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:

  1. Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko Návrh dotazu.
  2. 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.
  3. Zadejte následující příkaz SQL:
    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (podmínka)
  4. 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:

  1. Na kartě Vytvořit klikněte ve skupině Kód & makra natlačítko Návrh dotazu.
  2. 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.
  3. Zadejte následující příkaz SQL:
    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (název, rok, stav, cena)
  4. Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.

Začátek stránky