Databases

T05-004 Eliminación de tablas

Enunciado

Hemos dicho anteriormente. que para eliminar una tabla utilizaremos el comando DROP TABLE.

Sintaxis:

DROP TABLE NombreTabla [CASCADE CONSTRAINTS];

La opción CASCADE CONSTRAINTS se puede incluir para los casos en que alguna de las columnas sea clave ajena en otra tabla secundaria, lo que impediría su borrado. Al colocar esta opción las restricciones donde es clave ajena se borrarán antes y a continuación se eliminará la tabla en cuestión.

Ejemplo:

Imaginemos que hemos creado dos tablas relacionadoas, como PARTIDAS y USUARIOS, con las siguientes sentencias:

CREATE TABLE PARTIDAS (
    CodPartida NUMBER(8) PRIMARY KEY,
    FechaPartida DATE NOT NULL,
    Premio NUMBER(8,2)
);

CREATE TABLE USUARIOS (
    Login VARCHAR(15) CONSTRAINT usu_log_PK PRIMARY KEY,
    Password VARCHAR (8) NOT NULL,
    Fecha_Ingreso DATE DEFAULT SYSDATE,
    Cod_Partida NUMBER(8)
        CONSTRAINT Cod_Part_FK
        REFERENCES PARTIDAS
);

Si intentáramos eliminar la tabla partidas con el comando

DROP TABLE PARTIDAS;

se nos devolvería el siguiente error:

ORA-02449: unique/primary keys in table referenced by foreign keys

El error se debe a que en la tabla USUARIOS hemos creado una clave ajena que referencia a la tabla PARTIDAS.

Para evitar este error, vamos a indicar que, en primer lugar, se borren todas las restricciones de clave ajena que se hayan creado sobre la tabla que queremos borrar. Para ello, añadiremos la cláusula CASCADE CONSTRAINTS a la sentencia de borrado de la tabla:

DROP TABLE USUARIOS CASCADE CONSTRAINTS;

Ejercicio:

Imagina que, en la base de datos, tenemos las dos siguientes tablas creadas:

CREATE TABLE DEPARTAMENTOS (
    COD_DEPARTAMENTO CHAR(3) PRIMARY KEY,
    NOMBRE VARCHAR2(50)
);

CREATE TABLE MODULOS (
    CODIGO NUMBER PRIMARY KEY,
    NOMBRE VARCHAR2 (100),
    DEPARTAMENTO CHAR(3) REFERENCES DEPARTAMENTOS
    );

 

¿Cómo borrarías la tabla DEPARTAMENTOS?

Tipo

DDL

Solución


												
DROP TABLE DEPARTAMENTOS CASCADE CONSTRAINTS;

Prueba


											
SELECT TABLE_NAME FROM USER_TABLES;

Librerías (Onfly databases)


											
CREATE TABLE DEPARTAMENTOS ( COD_DEPARTAMENTO CHAR(3) PRIMARY KEY, NOMBRE VARCHAR2(50) ); CREATE TABLE MODULOS ( CODIGO NUMBER PRIMARY KEY, NOMBRE VARCHAR2 (100), DEPARTAMENTO CHAR(3) REFERENCES DEPARTAMENTOS );