3.2.4 ALTER TABLE
Permet modificar l'estructura d'una taula ja existent, bé afegint, llevant o modificant camps (columnes), bé afegint o llevant restriccions. També servirà per a canviar el nom d'un camp i fins i tot canviar el nom de la taula
Sintaxi
Per a alterar l'estructura d'algun camp o restricció utilitzarem aquesta sintaxi:
ALTER TABLE taula
{ADD | DROP | ALTER} {COLUMN camp | CONSTRAINT restricciómúltiple}
Per a canviar el nom d'un camp:
ALTER TABLE taula
RENAME [COLUMN] camp TO nou_nom_camp
Per a canviar el nom de la taula:
ALTER TABLE taula
RENAME TO nou_nom_taula
Afegir camp o restricció
Si volem afegir una columna o una restricció, l'haurem de definir totalment.
-
En el cas d'un camp, haurem d'especificar el nom, el tipus i opcionalment una restricció que afecte només al camp. Per exemple, aquesta sentència afegeix el camp supervisor (de tipus text de 10) a la taula EMPLEAT3. Observeu que en la definició del camp poden entrar restriccions de camp únic.
ALTER TABLE EMPLEAT3
ADD COLUMN supervisor VARCHAR(10) -
En el cas d'una restricció, aquesta serà del tipus de restricció múltiple, amb la sintaxi que vam veure en l'apartat de restriccions. Per exemple, aquesta sentència afegeix la clau externa reflexiva (de EMPLEAT3 a EMPLEAT3) que indica els supervisors. El dni hauria de ser la clau principal de EMPLEAT3
ALTER TABLE EMPLEAT3
ADD CONSTRAINT ce_emp3_emp3 FOREIGN KEY (supervisor) REFERENCES EMPLEAT3 (dni)
Modificar un camp
Podem fer dues coses: modificar el tipus del camp o modificar el valor per defecte (posar valor per defecte o llevar-lo)
Per a canviar el tipus haurem d'utilitzar la sintaxi ... ALTER COLUMN camp TYPE nou_tipus . Per exemple anem a fer que el camp poblacio siga de 25 caràcters
ALTER TABLE EMPLEAT3
ALTER COLUMN poblacio TYPE VARCHAR(25)
Canviar el tipus de dades és automàtic quan els tipus són compatibles entre ells. Si no ho són ens donarà error, però segurament ho podrem esquivar amb la clàusula USING, que ens permet posar a continuació el camp i aprofitem per a posar un operador de conversió de tipus (::) amb aquesta sintaxi:
ALTER TABLE TAULA
ALTER COLUMN camp TYPE tipus_nou USING camp::tipus_nou
Per a canviar el valor per defecte utilitzarem la sintaxi: ... ALTER COLUMN camp {SET | DROP} DEFAULT [expressió]
ALTER TABLE EMPLEAT3
ALTER COLUMN poblacio DROP DEFAULT
Esborrar camp o restricció
Si volem llevar un camp o una restricció és suficient amb especificar el nom del camp o de la restricció (per això pot ser molt interessant donar nom a les restriccions). En el primer exemple llevem la clau externa del supervisor. En la segona llevem el camp supervisor.
ALTER TABLE EMPLEAT3
DROP CONSTRAINT ce_emp3_emp3;
ALTER TABLE EMPLEAT3
DROP COLUMN supervisor
Renomenar un camp
Per exemple renomenem el camp data_incorporacio a data_inc:
ALTER TABLE EMPLEAT3
RENAME COLUMN data_incorporacio TO data_inc
Renomenar la taula
Ara li posarem el nom EMP3 a la taula EMPLEAT3
ALTER TABLE EMPLEAT3
RENAME TO EMP3
Exemples
-
Modificar la taula EMP3 per afegir el camp cp (codi postal) de tipus text de 5 caràcters.
ALTER TABLE EMP3 ADD COLUMN cp VARCHAR(5);
-
Modificar la taula EMP3 per modificar el camp anterior i que siga de tipus numèric.
ALTER TABLE EMP3 ALTER COLUMN cp TYPE NUMERIC(5) USING CP::NUMERIC;
-
Modificar la taula EMP3 per afegir la restricció (encara que siga un poc estranya) que no es pot repetir la combinació codi postal i població.
ALTER TABLE EMP3 ADD CONSTRAINT u_cp_pobl UNIQUE (cp,poblacio);
-
Modificar la taula EMP3 per esborrar la restricció anterior
ALTER TABLE EMP3 DROP CONSTRAINT u_cp_pobl;
-
Modificar la taula EMP3 per modificar el nom del camp cp a codi_postal
ALTER TABLE EMP3 RENAME COLUMN cp TO codi_postal;
-
Renomenar la taula EMP3 a EMPLEAT3
ALTER TABLE EMP3 RENAME TO EMPLEAT3;
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 3.0