¿Qué hace el TRUNCATE
diferente para soltar?
Creo que elimina todos los datos de la tabla, pero mantiene el nombre de la tabla en la base de datos, donde DROP
elimina todos los datos y la tabla. Es esto correcto ?
¿Qué hace el TRUNCATE
diferente para soltar?
Creo que elimina todos los datos de la tabla, pero mantiene el nombre de la tabla en la base de datos, donde DROP
elimina todos los datos y la tabla. Es esto correcto ?
Respuestas:
BORRAR - LENGUAJE DE MANIPULACIÓN DE DATOS (DML)
La DELETE
declaración en cualquier RDBMS se considera una declaración DML . También conocido como CRUD (Crear, Leer, Actualizar, Eliminar), este tipo de declaración está destinada a manipular datos en una base de datos sin afectar la estructura subyacente de los objetos. Lo que esto significa en términos prácticos es:
DELETE
declaración se puede ajustar utilizando un predicado a través de WHERE
o JOIN
para eliminar algunas o todas las filas de una tabla.DELETE
base de datos registrará una declaración y puede revertirla dentro de una transacción si la declaración falla.DELETE
, a tomará bloqueos de nivel de fila en los datos que se eliminan, aunque esto podría aumentar aún más según sea necesario.DELETE
puede ser "lento" (esto es relativo), pero más seguro porque es de grano fino.TRUNCATE - LENGUAJE DE DEFINICIÓN DE DATOS (DDL)
TRUCNATE
se considera una declaración DDL , lo que significa que tiene la intención de alterar cómo se definen los objetos en una base de datos. Por lo general, las declaraciones DDL son CREATE
, ALTER
o DROP
, pero tienen TRUNCATE
un propósito particular, el de "restablecer" una tabla eliminando todas las filas. Los métodos de este difieren entre los motores RDBMS y recomendaría mirar los detalles de MySQL . Las implicaciones prácticas de a TRUNCATE
son:
TRUNCATE
No puede ser de grano fino. Si tiene éxito, eliminará todas las filas de su tabla.TRUNCATE
normalmente no se registra. Esto varía según RDBMS y sugeriría que mire más específicamente cómo MySQL lo maneja. (Sugerencia, varía según la versión).TRUNCATE
requiere un bloqueo de metadatos de tabla para ejecutarse. La forma en que esto se implementa realmente puede ser específica para RDBMS, pero esencialmente el TRUNCATE
proceso debe evitar que otros procesos interfieran con la tabla para ejecutar su DDL.TRUNCATE
será más rápido que a DELETE
, pero menos seguro.TABLA DE GOTA - LENGUAJE DE DEFINICIÓN DE DATOS (DDL)
DROP TABLE
va más allá de a TRUNCATE
en que en realidad elimina la tabla de la base de datos por completo. Esto incluye eliminar todos los objetos asociados, como índices y restricciones. Si dejara caer una tabla, no solo eliminaría todos los datos, sino también la estructura. Esto generalmente se hará cuando ya no se necesite una tabla. La principal preocupación es que, dado que a DROP
es DDL, normalmente no se puede deshacer . Algunos motores RDBMS le permitirán ajustar DDL dentro de una transacción para que pueda revertirlo, pero esto no se considera la mejor práctica y debe evitarse.
Aunque no puedo hablar por MySQL, aquí hay una tabla rápida que compara algunos aspectos de truncar frente a eliminar dentro de Oracle.
truncate | delete
--------------------------------- | ---------------------------
DDL (implicitly commits, | DML
including any pending DML) |
Does not generate undo info | Generates undo info
(rollback statements) | (rollback statements)
Resets high water mark in table | Does not affect full-scan
and all indexes, improving | performance
full-scan performance |
Does not fire any delete triggers | Fires delete triggers
Priv to truncate cannot be granted | --
to truncate another user's |
table; DROP ANY TABLE system |
priv required |
Storage for table and indexes can | Never shrinks the size of a
be set to initial size | table or indexes
Cannot truncate parent table from | --
an established referential |
integrity constraint; must |
first disable foreign key |
that references the parent |
table |
Información compilada de este libro: http://amzn.com/0470395125
Espero que esto pueda ayudar a cualquier usuario de Oracle que se encuentre con esta página, como lo hice yo. Por favor, siéntase libre de señalar cuál de estos puntos, si alguno, es cierto en MySQL,
DROP TABLE TableName
-> eliminar la tabla de la base de datos.
TRUNCATE TABLE TableName
-> eliminar los datos de la tabla, incondicionalmente ... y restablecer el IDENTITY
valor inicial, si la tabla tiene un IDENTITY
campo.
DELETE
: Comando DML, si ejecuta el comando eliminar, elimine los únicos DATOS sin quitar la estructura de la tabla, podemos ROLLBACK los datos fila por fila
TRUNCATE
: Comando DDL, si ejecuta el comando Truncar, elimine los únicos DATOS sin desarmar la estructura de la tabla, no podemos deshacer los datos truncar, eliminar los datos de una página a otra, truncar es más rápido y luego eliminar la consulta
DROP
:, Comando DDL, si ejecuta el comando DROP, eliminará (eliminará) los datos y la estructura de la tabla total, tampoco podremos deshacer los datos