sql >> Base de Datos >  >> RDS >> Database

SQL DROP TABLE para principiantes

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 ser CASCADE o RESTRICT .

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 el TEMPORARY 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.