Modificación de tablas

En ocasiones, vamos a necesitar modificar una tabla de una base de datos ya creada. Para ellos contamos con la sentencia ALTER TABLE, que nos permite:

  • Añadir / modificar / eliminar columnas

  • Añadir / modificar / eliminar contraints a nivel de columna y tabla

La sentencia ALTER TABLE permite modificar una tabla ya existente.

ALTER TABLE TableName
    [alter_option [, alter_option] ...]
    

alter_option: {
  | ADD COLUMN col_name column_definition
        [FIRST | AFTER col_name]
  | ADD INDEX [index_name]
        [index_type] (key_part,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [index_type] (key_part,...)
        [index_option] ...
  | ADD [CONSTRAINT [symbol]] UNIQUE KEY
        [index_name] [index_type] (key_part,...)
        [index_option] ...
  | ADD CONSTRAINT FOREIGN KEY
        [index_name] (col_name,...)
        reference_definition
  | ADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
  | DROP {CHECK | CONSTRAINT} symbol
  | ALTER [COLUMN] col_name {
        SET DEFAULT {literal | (expr)}
      | SET {VISIBLE | INVISIBLE}
      | DROP DEFAULT
    }
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST | AFTER col_name]
  | DROP COLUMN col_name
  | DROP INDEX index_name
  | DROP PRIMARY KEY
  | DROP FOREIGN KEY fk_symbol
  | FORCE
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | ORDER BY col_name [, col_name] ...
  | RENAME COLUMN old_col_name TO new_col_name
  | RENAME [TO | AS] new_tbl_name
  | {WITHOUT | WITH} VALIDATION
}

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_type:
    USING {BTREE | HASH}

index_option: {
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}
}

Renombrar tabla

ALTER TABLE Persona RENAME TO Empleado;

Añadir columna

ALTER TABLE Persona ADD COLUMN Direccion VARCHAR(30) NOT NULL AFTER Apellidos;

Eliminar columna

ALTER TABLE Persona DROP COLUMN Direccion;

Renombrar columna

ALTER TABLE Persona RENAME COLUMN Dni TO Nif;

Añadir índice

ALTER TABLE Persona ADD [UNIQUE] INDEX idx_Persona_Nombre(Nombre);

Eliminar índice

ALTER TABLE Persona DROP INDEX idx_Persona_Nombre;

Añadir clave foránea

ALTER TABLE Persona ADD FOREIGN KEY fk_Persona_Departamento(CodigoDepartamento) REFERENCES Departmento(Codigo);

Eliminar clave foránea

# Primero eliminamos la foreign key
ALTER TABLE Persona DROP FOREIGN KEY fk_Persona_Departamento;
# Después eliminamos el índice de la foreign key
ALTER TABLE Persona DROP INDEX fk_Persona_Departamento;

Last updated