En SQL, si desea eliminar una tabla de una base de datos, debe usar DROP TABLE
declaración.
Eso destruye la tabla y todos sus datos.
Sintaxis
La sintaxis estándar de SQL es así:
DROP TABLE <table name> <drop behavior>
Dónde:
<table name>
es el nombre de la tabla que desea descartar.<drop behavior>
especifica cualquier opción. Estos pueden serCASCADE
oRESTRICT
.
Algunos RDBMS también aceptan un IF EXISTS
opcional argumento que significa que no devolverá un error si la tabla no existe.
Algunos RDBMS (como MySQL y MariaDB) también aceptan un TEMPORARY
opcional. palabra clave para garantizar que solo se eliminen las tablas temporales.
Oracle también acepta una PURGE
cláusula, que lo purga de la papelera de reciclaje.
Ejemplo
Aquí hay un ejemplo para demostrarlo.
DROP TABLE t1;
Ejecutar ese código elimina la tabla llamada t1
y todos sus datos.
El IF EXISTS
Cláusula
Aquí hay un ejemplo del uso de IF EXISTS
cláusula para verificar si la tabla ya existe.
DROP TABLE IF EXISTS t1;
Usando IF EXISTS
asegura que no recibamos un error si la tabla no existe.
Esto es lo que sucede si eliminamos IF EXISTS
de la declaración:
DROP TABLE t1;
Resultado:
Msg 3701, Level 11, State 5, Line 1 Cannot drop the table 't1', because it does not exist or you do not have permission.
Ese es el mensaje devuelto por SQL Server. Su mensaje dependerá del DBMS que esté utilizando.
Vistas y claves foráneas dependientes
Algunos RDBMS permiten un RESTRICT
opcional o CASCADE
palabra clave que especifica qué sucede si la tabla tiene claves externas o vistas que hacen referencia a ella.
El RESTRICT
Opción
Aquí hay un ejemplo del uso de RESTRICT
al intentar eliminar una tabla a la que hace referencia una clave externa en otra tabla:
DROP TABLE t1 RESTRICT;
Resultado:
cannot drop table t1 because other objects depend on it
Este ejemplo se realizó utilizando PostgreSQL. RESTRICT
es la opción predeterminada, por lo que habríamos obtenido el mismo resultado incluso si no hubiéramos incluido el RESTRICT
palabra clave.
La CASCADE
Opción
Esto es lo que sucede si cambiamos a CASCADE
al intentar eliminar la misma tabla (a la que hace referencia una clave externa en otra tabla):
DROP TABLE t1 CASCADE;
Resultado:
NOTICE: drop cascades to constraint t2_c2_fkey on table t2 Commands completed successfully
Esto eliminó la clave externa que hacía referencia a nuestro t1
mesa. La clave externa se llamó t2_c2_fkey
.
Tenga en cuenta que no eliminó la tabla que tenía la clave externa. Solo dejó caer la clave externa.
Si la tabla de destino (t1
) fue referenciado por cualquier vista, toda la vista se habría descartado.
No es necesario especificar CASCADE
para descartar cualquier índice, regla, activador o restricción que exista para la tabla de destino. Estos se eliminan automáticamente, incluso cuando se usa la opción predeterminada (RESTRICT
).
MySQL y MariaDB
Algunos DBMS (como MySQL y MariaDB) aceptan RESTRICT
y CASCADE
palabras clave, pero no hacen nada. Se proporcionan simplemente para facilitar la portabilidad entre DBMS.
Oráculo
Oracle tiene una sintaxis ligeramente diferente, CASCADE CONSTRAINTS
, que elimina todas las restricciones de integridad referencial que se refieren a claves principales y únicas en la tabla eliminada.
Servidor SQL
SQL Server no es compatible con CASCADE
o RESTRICT
palabras clave Si la tabla tiene dependencias de clave externa, deberá eliminarlas antes de eliminar la tabla; de lo contrario, obtendrá un error.
Sin embargo, en SQL Server, puede colocar una tabla incluso si una vista o un procedimiento almacenado hacen referencia a ella. Por lo tanto, debe buscar dichas referencias y descartarlas explícitamente usando DROP VIEW
o DROP PROCEDURE
.
SQLite
SQLite no es compatible con CASCADE
o RESTRICT
palabras clave
Si alguna vista hace referencia a la tabla de destino, la tabla aún se eliminará (y la vista permanecerá).
Si alguna clave externa hace referencia a la tabla de destino, el resultado dependerá de si tiene claves externas habilitadas y, de ser así, si hay datos en la tabla secundaria y, de ser así, si la clave externa está definida o no con ON DELETE CASCADE
.
Si usa SQLite, consulte SQLite DROP TABLE
para ver un ejemplo y una discusión sobre la eliminación de una tabla a la que hace referencia una clave externa.
Soltar varias tablas
Algunos RDBMS le permiten eliminar varias tablas de una sola DROP TABLE
declaración.
Ejemplo:
DROP TABLE t11, t12;
Los RDBMS que admiten esta sintaxis incluyen SQL Server, MySQL, MariaDB y PostgreSQL.
Sin embargo, si descarta una tabla a la que hace referencia una clave externa y esa clave externa evita que se elimine, deberá enumerar la tabla secundaria antes que la tabla principal.
Por ejemplo, si ejecuto la instrucción anterior en SQL Server, obtengo el siguiente error:
Msg 3726, Level 16, State 1, Line 1 Could not drop object 't11' because it is referenced by a FOREIGN KEY constraint.
En este caso, simplemente puedo cambiar el orden de las tablas en mi DROP TABLE
declaración:
DROP TABLE t12, t11;
En realidad, en este caso, recibí otro error que me decía que t12
no existe
Esto es lo que obtuve:
Msg 3701, Level 11, State 5, Line 1 Cannot drop the table 't12', because it does not exist or you do not have permission.
Esto se debe a que, aunque la declaración anterior no pudo descartar t11
, de hecho tuvo éxito al eliminar t12
.
Y como una comedia de errores, esta vez pudo soltar t11
pero no t12
.
Independientemente, ambas tablas ahora se han eliminado.
Pero si obtiene el pedido correcto la primera vez, debería recibir un mensaje como este:
Commands completed successfully.
La palabra clave TEMPORAL
Algunos RDBMS (como MySQL y MariaDB) aceptan un TEMPORARY
palabra clave.
Va entre DROP
y TABLE
, así:
DROP TEMPORARY TABLE t1;
Usando el TEMPORARY
La palabra clave garantizará que no descarte accidentalmente una tabla no temporal cuando intente eliminar una tabla temporal.
El TEMPORARY
palabra clave tiene los siguientes efectos:
- La declaración elimina solo
TEMPORARY
mesas. - La declaración no provoca una confirmación implícita (utilizando
DROP TABLE
sin elTEMPORARY
palabra clave confirma automáticamente la transacción activa actual). - No se comprueban los derechos de acceso. UN
TEMPORARY
la tabla es visible solo con la sesión que la creó, por lo que no es necesario verificar.
La cláusula de purga
Oracle tiene un PURGE
opcional cláusula, que puede usar si desea soltar la tabla y liberar el espacio asociado a ella en un solo paso. Si especifica PURGE
, la base de datos no coloca la tabla y sus objetos dependientes en la papelera de reciclaje.
Esto es equivalente a primero eliminar la tabla y luego purgarla de la papelera de reciclaje, pero le permite ahorrar un paso en el proceso.
Tenga en cuenta que si especifica PURGE
, no podrá recuperar la tabla.
Si no especifica PURGE
, el DROP
TABLE
no da como resultado que se devuelva espacio al tablespace para que lo usen otros objetos, y el espacio sigue contando para la cuota de espacio del usuario.