Změňte popis tabulky. Syntaxe příkazu ALTER TABLE. D. Přidání více sloupců s omezeními

Tým ALTER TABULKA používané pro dodatky, odstranění nebo modifikace sloupce ve stávajícím tabulka.

Příkaz ALTER TABLE

Tým ALTER TABULKA upraví definici tabulky jedním z následujících způsobů:

  • přidá sloupec
  • přidává omezení integrity
  • přepíše sloupec (datový typ, velikost, výchozí hodnota)
  • odstraní sloupec
  • upravuje charakteristiky paměti nebo jiné parametry
  • Povolí, zakáže nebo odstraní omezení integrity nebo spouštěč.

Stav: Tabulka musí být ve schématu uživatele nebo musí mít uživatel systémové oprávnění ZMĚNIT JAKOUKOLIV TABULKU.

Přidání sloupce s omezením NENÍ NULL, vývojář nebo správce DB musí vzít v úvahu řadu okolností. Nejprve musíte vytvořit sloupec bez omezení a poté zadat hodnoty do všech jeho řádků. Poté, co všechny hodnoty sloupců již nejsou NULL-hodnoty, lze na ni použít omezení NENÍ NULL. Pokud má sloupec omezení NENÍ NULL pokusí přidat uživatele, vrátí se chybová zpráva, že buď tabulka musí být prázdná, nebo sloupec musí obsahovat hodnotu pro každý existující řádek (připomeňme si, že po umístění omezení na sloupec NENÍ NULL v něm nemůže být přítomen NULL-hodnoty v žádném z existující řádky). V Oracle DBMS Od verze 8i můžete mazat sloupce.

Při změně datových typů existujících sloupců nebo přidávání sloupců do databázové tabulky musíte splnit řadu podmínek. Obecně se uznává, že zvyšování je dobré a snižování obecně není tak dobré. Povolené zvýšení:

  • Zvětšení velikosti sloupce CHAR nebo VARCHAR2
  • Zvětšení velikosti sloupce ČÍSLO
  • Přidání nových sloupců do tabulky

Pokles různé vlastnosti tabulky, včetně některých datových typů sloupců a skutečné číslo sloupce tabulky vyžaduje speciální akce. Často se před provedením změny musíte ujistit, že všechny hodnoty v příslušném sloupci nebo sloupcích jsou správné. NULL-významy. Chcete-li provést takové operace se sloupci tabulky obsahující data, musí vývojář najít nebo vytvořit nějaký druh oblasti pro dočasné uložení těchto dat. Například vytvořte tabulku pomocí příkazu VYTVOŘIT TABULKU JAKO VÝBĚR, který načítá data z primárního klíče a měnitelný sloupec nebo sloupce. Povolené změny:

  • Zmenšení velikosti sloupce ČÍSLO
  • Zmenšení velikosti sloupce CHAR nebo VARCHAR2(pouze s prázdným sloupcem pro všechny řádky)
  • Změna datového typu sloupce (pouze pokud je sloupec prázdný pro všechny řádky)

ALTER TABULKA Příklad 1

Přidání sloupce do tabulky:

ALTER TABULKA tl(pole1 char(10));

ALTER TABLE Příklad 2

Změna velikosti sloupce tabulky:

ALTER TABULKA t1 UPRAVIT(pole1 char(20));

ALTER TABLE Příklad 3

Odstranění sloupce tabulky:

ALTER TABULKA t1 PUSTI SLOUPEK pole1;

Pomocí příkazu ALTER TABLE můžete změnit název tabulky, aniž byste ji skutečně přesunuli fyzické informace v databázi:

ALTER TABULKA t1 PŘEJMENOVAT NA t2;

Podobnou operaci lze provést pomocí příkazu RENAME:

PŘEJMENOVAT t1 NA t2;

Omezení integrity databázových sloupců a tabulek lze změnit, stejně jako zakázat, povolit a odstranit. To dává vývojářům možnost vytvářet, upravovat a odstraňovat obchodní pravidla, která omezují data. Zvažme přidání omezení do databáze. Jednoduchost nebo složitost tohoto procesu závisí na určitých okolnostech. Pokud nemůžete vytvořit omezení s databází, nejjednodušším způsobem je přidat jej před zadáním dat:

ALTER TABULKA Příklad 4

Úprava struktury tabulky

ALTER TABULKA t1 UPRAVIT(pole 1 NENÍ NULL);

VYTVOŘIT TABULKU t2

(pole1 CHAR(10) PRIMÁRNÍ KLÍČ);

ALTER TABULKA t1 PŘIDAT

(OMEZENÍ fk_t1 CIZÍ KLÍČ(pole 1)

ODKAZY t2(pole1));

ALTER TABULKA t1 PŘIDAT (UNIKÁTNÍ(p_name));

ALTER TABULKA t1 PŘIDAT(p_size CHAR(4) KONTROLA

(p_size IN ('P','S','M','L','XL','XXL','XXXL')));

První výše uvedený příkaz používá klauzuli MODIFY k přidání omezení NOT NULL na sloupec a klauzuli ADD k přidání všech ostatních typů omezení integrity tabulky. Sloupec, pro který je omezení přidáno, již musí v databázové tabulce existovat; jinak se omezení nevytvoří.

ALTER TABULKA Příklad 5

Chcete-li přidat omezení integrity, můžete pomocí klíčového slova vynechat název omezení, které vytváříte OMEZENÍ. V tomto případě bude příkaz vypadat takto:

ALTER TABLE t1 PŘIDAT CIZÍ KLÍČ (pól1) REFERENCE t2 (pól1);

Pro vytvoření omezení existuje řada podmínek:

  • Primární klíče: Sloupce nemohou obsahovat hodnoty NULL a všechny hodnoty musí být jedinečné.
  • Cizí klíče: Sloupce jiných tabulek, na které se odkazuje, musí obsahovat hodnoty, které odpovídají všem hodnotám referenčních sloupců, nebo jejich hodnoty musí být NULL.
  • UNIKÁTNÍ omezení: Všechny hodnoty sloupců musí být jedinečné nebo hodnoty NULL.
  • CHECK Constraints: Nové omezení se bude vztahovat pouze na data přidaná nebo upravená poté, co byla vytvořena.
  • NOT NULL: Hodnoty NULL nejsou ve sloupcích povoleny.

Omezení lze povolit nebo zamítnout. Povolené omezení plní své funkce implementací obchodních pravidel ve vztahu k datům zapsaným do tabulky a zakázané omezení je převedeno do kategorie neúčinné, jako by bylo vymazáno, a jeho pravidla nejsou implementována.

ALTER TABULKA Příklad 6

Zákaz omezení:

ALTER TABULKA t1 VYPNOUT PRIMÁRNÍ KLÍČ;
ALTER TABULKA t1 VYPNOUT UNIKÁTNÍ(p_name);

ALTER TABULKA Příklad 7

V některých případech může zakázání primárního klíče, na kterém závisí cizí klíče, způsobit problémy, například:

ALTER TABULKA t2 ZAKÁZAT PRIMÁRNÍ KLÍČ;

Chyba na řádku 1: Nelze deaktivovat omezení…. – existují závislosti(není možné zakázat omezení - existují závislosti)

Chcete-li odebrat primární klíč, pokud existují cizí klíče, které na něm závisí, použijte příkaz ALTER TABLE DISABLE<ограничения>Je vyžadována CASCADE konstrukce:

ALTER TABULKA t2 ZAKÁZAT PRIMÁRNÍ KLÍČ KASKÁDA;

ALTER TABULKA Příklad 8

Zakázané omezení se řeší následovně:

ALTER TABULKA t1 POVOLIT PRIMÁRNÍ KLÍČ;

ALTER TABULKA t1 POVOLIT JEDINEČNÉ(p_name);

Můžete povolit pouze ta omezení, která byla nastavena dříve a v momentálně zakázáno.

Omezení, jehož proces vytváření selhal, nebude existovat v zakázané formě a bude čekat na vyřešení po vyřešení chyby. Omezení může obvykle odstranit vlastník tabulky nebo někdo, komu byla udělena příslušná práva:

ALTER TABULKA t1 DROP UNIKÁTNÍ(p_name);

Zavedení

Pro úpravu (změnu) jednotlivých databázových objektů má jazyk SQL příkazy a na nich založené SQL dotazy: SQL ALTER TABLE. Tento příkaz (dotaz) se používá, když potřebujete uložit data do tabulek a pouze některá z nich opravit (upravit).

V předchozím článku jsme se podívali na příkaz CREATE a sql použitý k vytvoření nové databázové tabulky. Dnes se podíváme, jak změnit jednotlivá data v databázové tabulce na základě sql dotaz ALTER TABULKA.

Poznámka. Příkaz ALTER patří do podmnožiny SQL, jazyka DDL, jazyka pro definici dat. S jeho pomocí můžete upravovat nejen tabulky, ale také procedury, uživatele, pohledy a oblasti tabulek. Existuje celá rodina takových příkazů: ALTER TABLE, ALTER VIEW, ALTER PROCEDURE, ALTER TRIGGER, ALTER USER, ALTER ROLE.

Co umí příkaz ALTER?

Pomocí příkazu ALTER můžete:

  • Přidejte sloupec do tabulky;
  • Přidejte omezení integrity;
  • Změnit typ dat ve sloupci tabulky, jeho velikost, výchozí hodnotu (přepsat sloupec);
  • Smazat sloupec;
  • Povolit, zakázat, odstranit spouštěč nebo omezení integrity.

Poznámka. Integrita databáze – jakýkoli vztah musí mít primární klíč a pro každý cizí klíč musí existovat primární klíč.

Důležité! Aby mohl uživatel použít příkaz ALTER, musí mít pro tabulku oprávnění ALTER, INSERT a CREATE.

Lekce 8, Série lekcí „Jazyk SQL“

Syntaxe příkazu SQL ALTER TABLE

Podívejme se na syntaxi příkazu ALTER TABLE.

ALTER TABULKA název_tabulky možnosti úpravy_tabulky

IGNORE je volitelná možnost ochrany primárního klíče.

Příklady použití příkazu ALTER TABLE

č. 1 Přidejte do tabulky sloupec

ALTER TABLE client(client_site varchar(10));//Přidejte sloupec client_site do tabulky klientů//

č. 2 Změna velikosti okraje sloupce

ALTER TABLE client(client_passwd varchar(25));//Změna velikosti pole sloupce client_passwd//

Ne. 3 Změňte velikost sloupcového pole pomocí upravit

ALTER TABLE klient upravit client_passwd varchar(25);//Změnit velikost pole sloupce client_passwd//

č. 4 Přidejte sloupec za určitý sloupec

ALTER TABLE client add client_site varchar(50) after client_telefon;//Přidejte sloupec client_site do klientské tabulky za sloupec client_telefon//

Shrnutí článku

  • V tomto článku jsme se seznámili s týmem jazyk SQL ALTER TABULKA.
  • Podívali jsme se na to, jak používat ALTER TABLE na příkladech databázové tabulky.

Manipulace s tabulkami je jednou z nejběžnějších činností, které správci databází a programátoři provádějí při práci s databázovými objekty. Tato část podrobně popisuje, jak vytvářet a upravovat tabulky.

Norma ANSI je něco jako nejmenší společný jmenovatel pro všechny výrobce, i když ne všechny možnosti standardní verze Příkazy CREATE TABLE a ALTER TABLE implementuje každý výrobce. Nicméně, standard ANSI je základní forma, který lze použít na všech platformách.

Platformy zase nabízejí různá rozšíření a doplňky k příkazům CREATE TABLE a ALTER TABLE standardu ANSI.

Obvykle je třeba pečlivě promyslet design stolu a způsob jeho vytvoření. Tento proces se nazývá návrh databáze. Proces analýzy vztahů tabulky s jejími vlastními daty a jinými tabulkami v databázi se nazývá normalizace. Před použitím příkazů CREATE DATABASE doporučujeme programátorům a správcům databází prostudovat principy návrhu a normalizace.

Syntaxe SQL 2003

Při provádění CREATE příkazy SQL 2003 standard TABLE vytvoří trvalou nebo dočasnou tabulku v databázi. Syntaxe je následující.

VYTVOŘIT [(LOCAL TEMPORARY) GLOBAL TEMPORARY)] TABLE název_tabulky (název_sloupce atributy typu dat [, ...]) | [název_sloupce S možnostmi MOŽNOSTÍ] |

| (GENEROVANÝ SYSTÉM | VYGENEROVÁN UŽIVATELEM | ODVOZENO)] [, ...]] [definice_tabulky]] název_tabulky atributy datového_typu] |

název_sloupce SET DEFAULT default_value] |

název_sloupce DROP DEFAULT] | název_sloupce ADD SCOPE název_tabulky | název_sloupce DROP SCOPE (RESTRICT | CASCADE)] |

název_sloupce (RESTRICT | CASCADE)] |

| Klíčová slova DOČASNÝ

Deklaruje trvalou nebo TEMPORARY tabulku s lokálním (LOCAL) nebo globálním (GLOBAL) rozsahem. Místní dočasné tabulky jsou přístupné pouze z relace, která je vytvořila, a po skončení relace, která je vytvořila, se automaticky odstraní. Globální dočasné tabulky jsou přístupné ze všech

aktivní relace

, ale automaticky se odstraní, když skončí relace, která je vytvořila. Nekvalifikujte názvy dočasných tabulek názvem schématu.

(název_sloupce atributy datového_typu [,]) Je definován seznam, ve kterém je jeden nebo více sloupců, jejich datové typy a další atributy , například tolerance hodnot NULL ​​(nulovatelnost). Každá deklarace tabulky musí obsahovat alespoň jeden sloupec, pro který můžete zadat: název_sloupce Určuje název sloupce. Musí se jednat o identifikátor platný podle pravidel daného RDBMS. Název musí dávat smysl! datový_typ Přidruží se ke sloupci s názvem název_sloupce určitý typ

data. Pro ty datové typy, které umožňují určit jejich délku, existuje

NENÍ NULL

doplňkový parametr délka, například VARCHAR(255). Datový typ musí být platný v RDBMS. Proúplný popis

platné datové typy a jejich varianty

konkrétní výrobci viz kapitola 2. atributy nesmí být použity žádné abecední znaky. Výraz může být řetězec nebo číselný literál, ale můžete také zadat uživatelem definovanou nebo systémovou funkci. standard SQL 2003 umožňuje v klauzuli DEFAULT použít následující funkce systému: NULL, USER, CURRENTJJSER, SESSION_USER, SYSTEMJJSER, CURRENT_PATH, CURRENT_D AND THOSE, CURRENTJIME, LOCALTIME, CURRENTJIMESTAMP, LOCALTJMESTAMP, ARRAY nebo ARRAY.

COLLATE název_kolace

Je určeno použité řazení, tj. pořadí řazení v odpovídajícím sloupci. Název mapování závisí na platformě. Pokud není zadán název řazení, je výchozím řazením znaková sada použitá ve sloupci. REFERENCE ARE CHECKED Tento parametr určuje, zda budou kontrolovány odkazy ve sloupci REF definovaném pomocí možnosti oboru. Další nabídka ON DELETE určuje, zda budou mít odkazované záznamy hodnoty vzdálené nahrávání, nastavte na NULL, jinak bude operace uvalena na omezení.

CONSTRAINT název omezení [constraint_type [constraint]]

Parametr přiřadí sloupci omezení a volitelně název omezení. Typy omezení jsou popsány v kapitole 2. Protože omezení je přidruženo ke konkrétnímu sloupci, deklarace omezení předpokládá, že tento sloupec bude jediný v podmínce. Jakmile je tabulka vytvořena, je omezení považováno za omezení na úrovni tabulky.

název_sloupce

Sloupec je definován pomocí speciálních voleb, jako je volba oboru, volba výchozí hodnoty, omezení na úrovni sloupce nebo klauzule COLLATE. V mnoha implementacích je klauzule WITH OPTIONS omezena na vytváření typovaných tabulek.

LIKE název_tabulky

Nová tabulka je vytvořena se stejnými definicemi sloupců jako existující tabulka název_tabulky.

REFIS column_name (GENEROVANÝ SYSTÉMEM | VYGENEROVÁNO UŽIVATELEM DERIVED]

Definuje sloupec identifikátoru objektu (OID) v typovaných tabulkách. Pro tabulku, která je kořenem hierarchie tabulek, je vyžadován identifikátor objektu. Podle tohoto parametru může být sloupec REF generován automaticky systémem (SYSTEM GENERATED), manuálně specifikován uživatelem při zadávání řádku (USER GENERATED) nebo vytvořen z jiného sloupce REF (DERIVED). Parametr vyžaduje, aby byl atribut REFERENCES zahrnut ve sloupci název_sloupce.

CONSTRAINT typ omezení [název omezení] [, …]

Tabulce je přiřazeno jedno nebo více omezení. Toto nastavení se výrazně liší od omezení na úrovni sloupců, protože se předpokládá, že omezení na úrovni sloupců platí pouze pro sloupec, ke kterému jsou přidružena. U omezení na úrovni tabulky je možné k omezení přiřadit více sloupců. Například v prodejní tabulce budete možná muset deklarovat jedinečné omezení pro zřetězený klíč store_id, order_id a order_date. To lze provést pouze pomocí omezení na úrovni tabulky. Podrobnou diskusi o omezeních naleznete v kapitole 2.

OF název_typu [definice_tabulky]

Tabulka je deklarována jako založená na již připraveném uživatelsky definovaném typu. V této situaci může mít tabulka pouze jeden sloupec pro každý atribut strukturovaný typ plus další sloupec definovaný v klauzuli REF IS. Datový typ REF je podrobně popsán v části příkazů CREATE/ALTER TYPE. Tato klauzule je nekompatibilní s klauzulí LIKE název_tabulky. Kde:

POD supertabulkou [definice/tabulky]

Deklaruje okamžitou supertabulku pro aktuální tabulku ve stejném schématu (pokud existuje). Volitelně můžete zadat úplnou definici tabulky pro supertabulku a vyplnit ji sloupci, omezeními a podobně.

PŘI POTVRZENÍ (ZACHOVAT ŘÁDKY VYMAZAT ŘÁDKY]

Klauzule ON COMMIT PRESERVE ROWS zachovává dočasné datové řádky tabulky při provedení příkazu COMMIT. Klauzule ON COMMIT DELETE RO WS odstraní všechny řádky dat v dočasné tabulce při provedení příkazu COMMIT.

PŘIDAT atributy název_sloupce datový_typ

Do tabulky se přidá sloupec s příslušným datovým typem a atributy.

ALTER název_sloupce SET DEFAULT default_value

Přidá výchozí hodnotu do sloupce (pokud neexistuje) nebo změní existující hodnotu.

ALTER název_sloupce DROP DEFAULT

Výchozí hodnota je zcela odstraněna z zadaný sloupec.

ALTER název_sloupce ADD SCOPE název_tabulky

Do zadaného sloupce se přidá obor. Rozsah je odkaz na vlastní typ data.

ALTER název_sloupce DROP SCOPE

Rozsah je odebrán ze zadaného sloupce. Klauzule RESTRICT a CASCADE jsou vysvětleny na konci tohoto seznamu.

DROP COLUMN název_sloupce

Zadaný sloupec bude z tabulky odstraněn. Klauzule RESTRICT a CASCADE jsou vysvětleny na konci tohoto seznamu.

PŘIDAT omezení_tabulky

Do tabulky se přidá omezení s zadané jméno a vlastnosti.

Název omezení DROP CONSTRAINT

Stávající omezení je z tabulky odstraněno.

OMEZIT

Když je tato klauzule specifikována, RDBMS zruší příkaz, pokud najde v databázi objekty, které na objektu závisí.

Když je tato klauzule specifikována, RDBMS odstraní všechny ostatní objekty, které na tomto objektu závisí.

    Chcete-li použít příkaz ALTER TABLE, musíte mít pro tabulku oprávnění ALTER, INSERT a CREATE.

    Možnost IGNORE je rozšíření MySQL k ANSI SQL92. Řídí, jak ALTER TABLE funguje, když jsou v nové tabulce duplicitní jedinečné klíče. Pokud není zadaná možnost IGNORE, pak se pro tuto kopii proces přeruší a vrátí zpět. Pokud je zadáno IGNORE, pak pro řádky s duplicitními jedinečnými klíči se použije pouze první řádek a zbytek se odstraní.

    V jednom příkazu ALTER TABLE můžete spustit více příkazů ADD, ALTER, DROP a CHANGE. Toto je rozšíření MySQL na ANSI SQL92, kde je povolen pouze jeden z výrazů uvedených v jediném příkazu ALTER TABLE.

    Možnosti CHANGE název_sloupce, DROP název_sloupce a DROP INDEX jsou také rozšířením MySQL k ANSI SQL92.

    Možnost MODIFY je rozšířením Oracle k příkazu ALTER TABLE.

    Nepovinné slovo COLUMN představuje bílý šum a lze jej vynechat.

    Při použití ALTER TABLE table_name RENAME TO new_name bez dalších možností MySQL jednoduše přejmenuje odpovídající soubory daný stůl. V tomto případě není potřeba vytvářet dočasnou tabulku. .

    Příkaz create_definition používá stejnou syntaxi pro ADD a CHANGE jako pro CREATE TABLE. Všimněte si, že tato syntaxe zahrnuje název sloupce, nikoli pouze jeho typ. .

    Sloupec lze přejmenovat pomocí příkazu CHANGE název_sloupce create_definition. Chcete-li to provést, musíte zadat staré a nové názvy sloupců a jejich aktuální typ. Chcete-li například přejmenovat sloupec INTEGER z a na b , můžete provést následující:

    Mysql> ALTER TABLE t1 ZMĚNA a b CELÉ ČÍSLO;

    Pokud změníte typ sloupce, ale ne jeho název, syntaxe výrazu CHANGE stále vyžaduje zadání obou názvů sloupců, i když jsou stejné. Například:

    Mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;

    Počínaje verzí MySQL 3.22.16a však můžete také použít výraz MODIFY ke změně typu sloupce bez jeho přejmenování:

    Mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;

    Při použití CHANGE nebo MODIFY ke snížení délky sloupce, který je součástí indexu (například index na prvních 10 znacích sloupce VARCHAR), nemůžete sloupec zkrátit, než je počet indexovaných znaků.

    Když změníte typ sloupce pomocí CHANGE nebo MODIFY, MySQL se pokusí převést data na nový typ co nejpřesněji.

    V MySQL 3.22 a novějších můžete použít FIRST nebo ADD ... AFTER název_sloupce k přidání sloupce na danou pozici v řádku tabulky. Standardně je sloupec přidán na konec. Od verze MySQL 4.0.1 můžete také používat klíčová slova FIRST a AFTER ve volbách CHANGE nebo MODIFY.

    Možnost ALTER COLUMN nastaví novou výchozí hodnotu pro sloupec nebo odstraní starou. Pokud je staré výchozí nastavení odstraněno a tento sloupec může být NULL, nová výchozí hodnota bude NULL. Pokud sloupec nemůže být NULL, pak MySQL přiřadí výchozí hodnotu, jak je popsáno v části .

    Volba DROP INDEX odstraní index. Jedná se o rozšíření MySQL na ANSI SQL92. .

    Pokud jsou sloupce odebrány z tabulky, jsou tyto sloupce odstraněny také z jakéhokoli indexu, jehož jsou součástí. Pokud jsou odstraněny všechny sloupce, které tvoří index, pak tento index je také vymazán.

    Pokud tabulka obsahuje pouze jeden sloupec, nelze tento sloupec odstranit. Místo toho můžete odstranit tento stůl pomocí příkazu DROP TABLE.

    Volba DROP PRIMARY KEY odebere primární index. Pokud takový index v dané tabulce neexistuje, bude odebrán první UNIQUE index v této tabulce. (MySQL je první jedinečný klíč UNIQUE jako primární klíč PRIMARY KEY, pokud nebyl explicitně zadán žádný jiný primární klíč PRIMARY KEY). Když do tabulky přidáte UNIKÁTNÍ INDEX nebo PRIMÁRNÍ KLÍČ, uloží se před jakékoli jiné nejedinečné klíče, aby bylo možné co nejdříve identifikovat duplicitní klíče.

    Možnost ORDER BY umožňuje tvořit nový stůl s řádky umístěnými v daném pořadí. Upozorňujeme, že vytvořená tabulka si po operacích vložení a odstranění nezachová toto pořadí řádků. V některých případech může tato funkce usnadnit operace řazení v MySQL, pokud má tabulka uspořádání sloupců, které byste v budoucnu chtěli mít. Tato možnost je užitečná hlavně v případě, že víte předem jistý řád, který se bude primárně dotazovat na řetězce. Použití této možnosti po významných transformacích tabulek umožňuje lepší výkon.

    Když použijete příkaz ALTER TABLE na tabulkách MyISAM, všechny nejedinečné indexy se vytvoří v samostatný balíček(podobně jako OPRAVA). Díky tomu bude příkaz ALTER TABLE rychlejší, pokud existuje více indexů.

    Od MySQL 4.0 lze výše uvedenou funkci povolit explicitně. Příkaz ALTER TABLE ... DISABLE KEYS blokuje MySQL v aktualizaci nejedinečných indexů v tabulkách MyISAM. Poté můžete pomocí příkazu ALTER TABLE ... ENABLE KEYS znovu vytvořit chybějící indexy. Protože MySQL to dělá s speciální algoritmus I když je zamykání klíčů mnohem rychlejší než vkládání klíčů po jednom, může poskytnout výrazné zrychlení na velkých polích vložek.

    Pomocí funkce C API mysql_info() můžete určit, kolik záznamů bylo zkopírováno, a také (při použití IGNORE) kolik záznamů bylo odstraněno kvůli duplicitním jedinečným hodnotám klíče.

    Příkazy FOREIGN KEY , CHECK a REFERENCES nedělají prakticky nic ve všech typech tabulek kromě InnoDB. InnoDB podporuje ADD CONSTRAINT FOREIGN KEY (...) REFERENCE ... (...) . Všimněte si, že InnoDB neumožňuje specifikovat index_name. . Podpora syntaxe FOREIGH KEY je poskytována pouze z důvodů kompatibility, aby bylo snazší přenést kód z jiného kódu SQL servery a spouštění aplikací, které vytvářejí tabulky s odkazy. .

Lze rozlišit následující úrovně omezení ověřování:

  • úroveň atributu (sloupce),
  • úroveň n-tice (řádek),
  • vztahová úroveň (tabulka).

Omezení na úrovni sloupce kontroluje hodnotu pouze jednoho samostatný sloupec, jinými slovy v omezení tohoto typu existuje odkaz pouze na jeden sloupec tabulky, jejíž definice obsahuje toto omezení. Abychom uvedli příklad takového omezení, vraťme se k diagramu „Počítačová společnost“. V tabulce Produkt může sloupec typu obsahovat jednu ze tří hodnot. Zadání jakýchkoli dalších informací do tohoto sloupce můžeme zabránit pomocí omezení, jako je toto:

    ZKONTROLUJTE (zadejte IN ("tiskárna" , "pc" , "laptop" ))

Vraťme se o krok zpět a podívejme se na příkaz ALTER TABLE, který nám umožňuje změnit strukturu tabulky, aniž bychom ji museli pokaždé znovu vytvářet. To je o to důležitější, že může být potřeba změnit strukturu, když tabulka již obsahuje data.

Pomocí příkazu ALTER TABLE můžete přidat nebo odebrat sloupce, výchozí hodnoty a omezení.

V přítomný okamžik Máme zájem přidat omezení do sloupce typu, takže nejprve poskytneme syntaxi operátoru pro přidání omezení:

    ALTER TABULKA

    PŘIDAT OMEZENÍ ;

Pojďme nyní přidat naše omezení a zkontrolovat, jak to funguje.

    Produkt ALTER TABLE

    ADD CONSTRAINT chk_type CHECK (zadejte IN ("pc" , "laptop" , "tiskárna" ) ) ;

Abyste se ujistili, že omezení funguje tak, jak očekáváme, zkuste přidat nový typ modelu:

    INSERT INTO Product VALUES ("A" , 1122 , "notebook" ) ;

Podle očekávání obdržíme jako odpověď chybovou zprávu:

Příkaz INSERT byl v konfliktu s omezením CHECK "chk_type". Ke konfliktu došlo v databázi "learn", tabulce "dbo.product", sloupci "type". Prohlášení bylo ukončeno.

(Příkaz INSERT byl v konfliktu s podmínkou CHECK "chk_type". Ke konfliktu došlo v databázi "learn", tabulce "dbo.product", sloupci "type". Tento příkaz byl přerušen.)

Jak asi tušíte, omezení na úrovni řádku obsahuje odkazy na více sloupců. V tomto případě se omezení kontroluje u každého variabilní řetězec odděleně. Řádek lze přidat (nebo změnit), pokud omezení není porušeno.

Jako příklad zakažme výrobci Z vyrábět cokoli jiného než tiskárny.

    Produkt ALTER TABLE

    PŘIDAT omezení chk_maker_Z CHECK ((maker="Z" AND type= "printer" ) NEBO výrobce "Z" ) ;

Omezení tedy kontroluje, že model v tabulce Produkt musí být tiskárna od výrobce Z (maker="Z" a type="printer") nebo jiného výrobce (ne však Z).

Pokud se pokusíme přidat model PC výrobce Z,




Nahoru