SQL - ALTER TABLE Izjave


Izmjena postojećih tabela

Sasvim je moguće da nakon kreiranja tabele, 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 otpremnika čija je struktura sljedeća:



Ovu tabelu otpremnika koristićemo za sve naše izjave ALTER TABLE. Sada pretpostavimo da želimo proširiti postojeću tabelu otpremnika 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 dati sa:

ALTER TABLE table_name ADD column_name data_type constraints;

Sljedeća izjava dodaje novu kolonu faksom 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 faks kolone na početak otpreme 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 faks kolone 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 brodara ima jedan glavni problem. Ako umetnete zapise s duplikatima telefonskih brojeva, to 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 dati sa:

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, dobit ćete pogreš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 dati sa:

ALTER TABLE table_name DROP COLUMN column_name;

Sljedeća izjava uklanja naš novo dodani faks kolone 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 otpremnika 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-specificiranjem 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 tablica

Osnovna sintaksa za preimenovanje postojeće tabele u MySQL može se dati sa:

ALTER TABLE current_table_name RENAME new_column_name;

Sljedeća izjava preimenuje našeg pošiljatelja u tabeli pošiljatelja (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;