Omet navegació

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

  1. 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);

 

  1. 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;

 

  1. 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);

 

  1. Modificar la taula EMP3 per esborrar la restricció anterior

ALTER TABLE EMP3 DROP CONSTRAINT u_cp_pobl;

 

  1. Modificar la taula EMP3 per modificar el nom del camp cp a codi_postal

ALTER TABLE EMP3 RENAME COLUMN  cp TO codi_postal;

 

  1. Renomenar la taula EMP3 a EMPLEAT3

ALTER TABLE EMP3 RENAME TO EMPLEAT3;