13.1.37 TRUNCATE TABLE Statement
TRUNCATE tbl_name
TRUNCATE TABLE
empties a table completely. It requires the DROP
privilege. Logically, TRUNCATE TABLE
is similar to a DELETE
statement that deletes all rows, or a sequence of DROP TABLE
and CREATE TABLE
statements.,
para lograr un alto rendimiento, TRUNCATE TABLE
omite el método DML de eliminación de datos. Por lo tanto, no causa que ON DELETE
desencadene, no se puede realizar para tablas InnoDB
con relaciones de clave externa padre-hijo, y no se puede revertir como una operación DML. Sin embargo, las operaciones TRUNCATE TABLE
en las tablas que utilizan un motor de almacenamiento compatible con atomic DDL se confirman por completo o se revierten si el servidor se detiene durante su operación. Para más información, ver sección 13.1.,1, «Soporte De Declaración De Definición De Datos Atómicos».
Aunque TRUNCATE TABLE
es similar a DELETE
, se clasifica como una instrucción DDL, en lugar de una instrucción DML. Se diferencia de DELETE
en las siguientes formas:
-
truncar las operaciones soltar y volver a crear la tabla, que es mucho más rápido que eliminar filas una por una, particularmente para tablas grandes.
-
Las operaciones truncadas causan una confirmación implícita, por lo que no se pueden revertir. Ver Sección 13.3.,3, «declaraciones que causan un Commit implícito».
-
Las operaciones de truncamiento no se pueden realizar si la sesión tiene un bloqueo de tabla activo.
-
TRUNCATE TABLE
falla para unInnoDB
tabla oNDB
tabla si hay algunaFOREIGN KEY
restricciones de otras tablas que hacen referencia a la tabla. Se Permiten restricciones de clave foránea entre columnas de la misma tabla. -
Las operaciones de truncamiento no devuelven un valor significativo para el número de filas eliminadas., El resultado habitual es «0 filas afectadas», que debe interpretarse como » Sin información.»
-
mientras la definición de la tabla sea válida, la tabla se puede volver a crear como una tabla vacía con
TRUNCATE TABLE
, incluso si los datos o archivos de índice se han dañado. -
cualquier
AUTO_INCREMENT
el valor se restablece a su valor inicial. Esto es cierto incluso paraMyISAM
yInnoDB
, que normalmente no reutilizar los valores de la secuencia., -
cuando se usa con tablas con particiones,
TRUNCATE TABLE
conserva la partición; es decir, los archivos de datos e índices se eliminan y se vuelven a crear, mientras que las definiciones de partición no se ven afectadas. -
la instrucción
TRUNCATE TABLE
no invoca desencadenadoresON DELETE
. -
Se admite el truncamiento de una tabla
InnoDB
dañada.
TRUNCATE TABLE
para una tabla cierra todos los controladores de la tabla que se abrieron con HANDLER OPEN
.,
TRUNCATE TABLE
se trata para fines de registro binario y replicación como DROP TABLE
seguido de CREATE TABLE
—es decir, como DDL en lugar de DML. Esto se debe al hecho de que, al usar InnoDB
y otros motores de almacenamiento transaccional donde el nivel de aislamiento de transacción no permite el registro basado en declaraciones (READ COMMITTED
o READ UNCOMMITTED
), la declaración no se registró y replicó al usar STATEMENT
o MIXED
modo de registro., (Bug # 36763) sin embargo, todavía se aplica en réplicas usando InnoDB
de la manera descrita anteriormente.
en MySQL 5.7 y versiones anteriores, en un sistema con un grupo de búfer grande y innodb_adaptive_hash_index
habilitado, una operación TRUNCATE TABLE
podría causar una caída temporal en el rendimiento del sistema debido a un análisis de LRU que se produjo al eliminar las entradas de índice de hash adaptativo de la tabla (Bug #68184). La reasignación de TRUNCATE TABLE
a DROP TABLE
y CREATE TABLE
en MySQL 8.0 evita el análisis problemático de LRU.,
TRUNCATE TABLE
se puede utilizar con tablas de resumen de esquema de rendimiento, pero el efecto es restablecer las columnas de resumen a 0 o NULL
, no eliminar filas. Consulte La Sección 27.12.18, «Tablas De Resumen De Esquema De Rendimiento».
al truncar una tabla InnoDB
que reside en un espacio de tabla file-per-table, se elimina el espacio de tabla existente y se crea uno nuevo. A partir de MySQL 8.0.,21, si el espacio de tabla se creó con una versión anterior y reside en un directorio desconocido, InnoDB
crea el nuevo espacio de tabla en la ubicación predeterminada y escribe la siguiente advertencia en el registro de errores: la ubicación del directorio de datos debe estar en un directorio conocido. La ubicación del directorio de datos se ignorará y el archivo se colocará en la ubicación predeterminada de datadir. Conoce los directorios son los definidos por el datadir
, innodb_data_home_dir
y innodb_directories
variables., Para que TRUNCATE TABLE
cree el espacio de tabla en su ubicación actual, agregue el directorio a la configuración innodb_directories
antes de ejecutar TRUNCATE TABLE
.