SQL - ALTER TABLE Izjave


Izmjena postojećih tabela

Sasvim je moguće da nakon kreiranja tabele, da kad je počnete koristiti, otkrijete da ste zaboravili spomenuti bilo koju kolonu ili ograničenje ili ste naveli pogrešno ime za kolonu. U takvoj situaciji možete koristiti izraz ALTER TABLE za izmjenu ili promjenu postojeće tabele dodavanjem, promjenom ili brisanjem kolona u tabeli. Uzmimo u obzir da u našoj bazi podataka imamo tabelu špeditera (shippers) čija je struktura sljedeća:



Ovu tabelu špeditera (shippers) koristićemo za sve naše izjave ALTER TABLE. Sada pretpostavimo da želimo proširiti postojeću tabelu špeditera (shippers) dodavanjem još jedne kolone, ali pitanje je kako to možemo učiniti pomoću SQL naredbi? Pa, hajde da saznamo.



Dodavanje nove kolone

Osnovna sintaksa za dodavanje nove kolone u postojeću tabelu može se napisati kao:

ALTER TABLE table_name ADD column_name data_type constraints;

Sljedeća izjava dodaje novu kolonu fax u tabelu pošiljalaca.

ALTER TABLE shippers ADD fax VARCHAR(20);

Sada, nakon izvršavanja gornjeg izraza ako vidite strukturu tabele pomoću naredbe DESCRIBE shippers; u MySQL-u command-line izgleda kao u sljedećem primjeru:



MySQL dodaje nove kolone na kraju prema zadanim postavkama. Međutim, ako želite dodati novu kolonu nakoj određenoj koloni, možete koristiti klauzulu AFTER, kao u sljedećem primjeru:

mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;

MySQL pruža još jednu klauzulu FIRST koju možete koristiti za dodavanje nove kolone na prvo mjesto u tabeli. Samo zamijenite klauzulu AFTER s FIRST u prethodnom primjeru da biste dodali fax kolonu na početak tabele.



Promjena položaja kolone

U MySQL-u, ako ste već kreirali tabelu, ali ste nezadovoljni postojećom pozicijom kolone u tabeli, možete je promijeniti u bilo kojem trenutku koristeći sljedeću sintaksu:

ALTER TABLE table_name
MODIFY column_name column_definition AFTER column_name;

Sljedeća izjava stavlja fax kolonu iza shipper_name pošiljatelja u tabeli otpreme.

mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;


Dodavanje ograničenja

Naša trenutna tabela ima jedan glavni problem. Ako umetnete zapise s duplikatima telefonskih brojeva, ništa vas neće spriječiti u tome, što nije dobro, to bi trebalo biti jedinstveno. To možete popraviti dodavanjem ograničenja UNIQUE u kolonu telefona. Osnovna sintaksa za dodavanje ovog ograničenja postojećim kolonama tabele može se napisati kao:

ALTER TABLE table_name ADD UNIQUE (column_name,...);

Sljedeća izjava dodaje ograničenje UNIQUE u kolonu telefona.

mysql> ALTER TABLE shippers ADD UNIQUE (phone);

Nakon izvršavanja ove izjave, ako pokušate umetnuti duplikat telefonskog broja, dobićete grešku. Slično tome, ako ste stvorili tabelu bez PRIMARNOG KLJUČA PRIMARY KEY, možete je dodati sa:

ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);

Sljedeća izjava dodaje ograničenje PRIMARNOM KLJUČU PRIMARY KEY u kolonu shipper_id, ako nije definisano.

mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);


Uklanjanje kolona

Osnovna sintaksa za uklanjanje kolona iz postojeće tabele može se napisati kao:

ALTER TABLE table_name DROP COLUMN column_name;

Sljedeća izjava uklanja našu novododanu fax kolonu iz tabele otpreme (shippers).

mysql> ALTER TABLE shippers DROP COLUMN fax;

Sada, nakon izvršavanja gornjeg izraza, ako vidite strukturu tabele, ona izgleda kao u sljedećem primjeru:



Promjena tipa podataka kolone

Tip podataka kolone u SQL Serveru možete izmijeniti pomoću klauzule ALTER, kako u sljedećem primjeru:

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;

MySQL poslužitelj baze podataka međutim ne podržava sintaksu ALTER COLUMN. Podržava zamjensku klauzulu MODIFY koju možete koristiti za izmjenu kolona na sljedeći način:

ALTER TABLE table_name MODIFY column_name new_data_type;

Sljedeća izjava mijenja trenutni tip podataka kolone telefona u našoj tabeli špediter s VARCHAR na CHAR i dužinu sa 20 na 15.

mysql> ALTER TABLE shippers MODIFY phone CHAR(15);

Slično tome, možete koristiti klauzulu MODIFY da biste se prebacivali između toga da li kolona u MySQL tabeli treba dopuštati null vrijednosti ili ne re-specifikovanjem postojeće definicije kolone i dodavanjem ograničenja NULL ili NOT NULL na kraju, poput ovog:

mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;


Preimenovanje tabele

Osnovna sintaksa za preimenovanje postojeće tabele u MySQL može se napisati kao:

ALTER TABLE current_table_name RENAME new_column_name;

Sljedeća izjava preimenuje našeg špeditera u tabeli špediter (shipper).

mysql> ALTER TABLE shippers RENAME shipper;

Takođe možete postići istu stvar u MySQL-u pomoću izraza RENAME TABLE, kao u sljedećem primjeru:

mysql> RENAME TABLE shippers TO shipper;