Príkaz ALTER TABLE
Pre modifikáciu samotnej tabuľky slúži príkaz ALTER TABLE. Pomocou tohto príkazu vieme pridávať, mazať a premenovávať jednotlivé stĺpce, premenovávať tabuľku, vytvárať a mazať indexy, meniť typy a vlastnosti existujúcich polí.
ALTER TABLE nazov_tabulky prikaz; //príkazy sú popísané nižšie
RENAME
Na premenovanie tabuľky slúži príkaz RENAME.
ALTER TABLE nazov_tabulky RENAME novy_nazov_tabulky;
ADD COLUMN
Pre pridanie nového stĺpca slúži príkaz ADD.
ALTER TABLE nazov_tabulky ADD nazov_noveho_stlpca datovy_typ [FIRST | AFTER nazov_stlpca];
Ak chceme mať stĺpec v tabuľke ako prvý, tak použijeme príkaz FIRST. Ak má stĺpec nasledovať za iným použíjeme príkaz AFTER. Keď nepoužijeme ani jeden z príkazov, stĺpec sa pridá na koniec tabuľky.
ALTER TABLE udaje ADD rod_c VARCHAR(12) AFTER vek;
Ak potrebujeme priradiť atribútom primárny kľúč použijeme nasledovnú syntax:
Syntax:ALTER TABLE nazov_tabulky ADD PRIMARY KEY (nazov_stlpca,...);
Ak by sme v našej tabuľke nemali určené id ako primárny kľúč, spravili by sme to nasledovne:
Príklad:ALTER TABLE udaje ADD PRIMARY KEY (id);
Definícia pridávaného stĺpca môže byť aj zložitejšia. Môže obsahovať modifikátory ako napr. primárny kľúč, ak ešte nebol v tabuľke špecifikovaný. Môžeme do každého záznamu vložiť preddefinovanú hodnotu.
Príklad:ALTER TABLE udaje ADD pohlavie VARCHAR(4) NOT NULL DEFAULT ’muz’ AFTER priezvisko;
Aby sme zabezpečili nejakú hodnotu v položkách nastavíme si defaultnú hodnotu, pričom pole bude môcť nadobúdať dve hodnoty "muz" a "zena". Týmto spôsobom sa bežne v databázach kódujú logické hodnoty.
Príklad:ALTER TABLE udaje ADD pohlavie ENUM('muz','zena') NOT NULL DEFAULT 'muz' AFTER priezvisko;
Keby sme v tabuľke často vyhľadávali nielen podľa identifikačného čísla osoby, ale aj podľa jeho mena a priezviska, a nechceme, aby sa zakaždým prehľadávala celá tabuľka a vedeli by sa veci urýchliť, môžeme tabuľke vytvoriť index. To môže niekedy veci značne urýchliť. Napríklad by sme sa mohli zbaviť toho, aby sa prehľadávala celá tabuľka, keď sa mení bydlisko všetkým Máriám. Nový index sa pridáva nasledovne:
Syntax:ALTER TABLE nazov_tabulky ADD INDEX nazov_indexu (nazov_stlpca,...);
Vytvoríme si index, ktorý sa bude volať podla_mena a bude si pamätať zoradenie tabuľky podľa priezviska a v prípade rovnakého priezviska podľa krstných mien.
Príklad:ALTER TABLE udaje ADD INDEX podla_mena (priezvisko,meno);
Index môžeme vytvoriť aj tak, aby mal ešte jednu vlastnosť, ktorá sa môže hodiť. Môže zabezpečiť, aby sa v tabuľke neopakovali dve z hľadiska indexu rovnaké hodnoty.
Syntax:ALTER TABLE nazov_tabulky ADD UNIQUE nazov_indexu (nazov_stlpca,...);
Ak by sme chceli vytvoriť takýto index, použijeme namiesto predošlého príkazu tento:
Príklad:ALTER TABLE udaje ADD UNIQUE podla_mena (priezvisko,meno);
Takto upravená tabuľka si bude kontrolovať, či sa v nej nevyskytujú zhodné mená. Ak by ste tam chceli osobu s rovnakým menom zaradiť, odmietne.
ALTER
Ak chceme zmeniť štandardnú hodnotu niektorého stĺpca, spraví sa to príkazom ALTER. Ak chceme zrušiť iba štandardnú hodnotu, namiesto SET DEFAULT napíšete iba DROP DEFAULT.
ALTER TABLE nazov_tabulky ALTER nazov_stlpca SET DEFAULT "hodnota" | DROP DEFAULT;
Príklad:ALTER TABLE udaje ALTER pohlavie SET DEFAULT "muz";
CHANGE
Ak chceme niektorý stĺpec zmeniť, použijeme príkaz CHANGE.
ALTER TABLE nazov_tabulky CHANGE stary_nazov_stlpca nova_definicia;
Ak by sme chceli zbaviť atribút id vlastnosti AUTO_INCREMENT, zmenili by sme ju nasledovne:
Príklad:ALTER TABLE udaje CHANGE id id INT UNSIGNED NOT NULL;
Všimnime si, že po CHANGE id nasleduje kompletný popis nového atribútu, vrátane názvu atribútu, ktorý sa tak môže zmeniť. Ak je možné dáta v danom stĺpci tabuľky skonvertovať na nový formát, udeje sa to.
MODIFY
Pre zmenu typu alebo integritného obmedzenia niektorých stĺpcov môžeme tiež použiť príkaz MODIFY.
ALTER TABLE nazov_tabulky MODIFY nazov_stlpca nova_definicia;
Zmeníme si veľkosť hodnoty pola priezvisko.
Príklad:ALTER TABLE udaje MODIFY priezvisko VARCHAR(30);
Pre ukážku stĺpec "meno" premenujeme na "prve_meno" a zmenime jeho typ z CHAR(25) na CHAR(30). Okrem toho zmeníme typ položky "vek" na TINYINT NOT NULL bez zmeny názvu položky.
Príklad:
ALTER TABLE udaje MODIFY vek TINYINT NOT NULL,
CHANGE meno prve_meno CHAR(30);
DROP
Pre mazanie stĺpcov z tabuľky slúži príkaz DROP.
ALTER TABLE nazov_tabulky DROP nazov_odstranovaneho_stlpca;
Príklad:ALTER TABLE udaje DROP rod_c;
Ak by sme chceli tabuľke odobrať primárny kľúč, použijeme nasledovný príkaz.
Syntax:ALTER TABLE nazov_tabulky DROP PRIMARY KEY;
Príklad:ALTER TABLE udaje DROP PRIMARY KEY;
Tento príkaz neodstráni atribút id, atribút iba prestane byť primárnym kľúčom, to znamená, že by v tabuľke mohli existovať dve osoby s rovnakou hodnotou id.
Ak chceme zrušiť index, použite príkaz:
Syntax:ALTER TABLE nazov_tabulky DROP INDEX nazov_indexu;
Príklad:ALTER TABLE udaje DROP INDEX podla_mena;
Musíme si dať pozor, aby sme v tabuľke neudržiavali priveľa indexov. Zrýchli sa nimi síce vyhľadávanie, ale spomalí sa manipulácia s dátami a indexy zaberajú aj istý priestor na disku.

