sql >> Base de Datos >  >> RDS >> Mysql

Comprender MySQL TRUNCATE TABLE por ejemplos prácticos

La declaración MySQL TRUNCATE TABLE es una declaración DDL utilizada para eliminar todos los registros de la tabla MySQL. Cuando ejecutamos este comando, primero elimina la tabla existente y luego crea una nueva tabla usando la definición de la tabla. La secuencia de ejecución de consultas del comando TRUNCATE TABLE es DROP TABLE y CREATE TABLE.

Las características de la sentencia TRUNCATE TABLE son las siguientes:

  1. Cuando ejecutamos la declaración TRUNCATE TABLE en lugar de eliminar filas, MySQL elimina la tabla y la vuelve a crear. Es más rápido que la declaración DELETE, particularmente para tablas grandes.
  2. TRUNCATE TABLE pasa por alto los activadores DELETE para lograr un alto rendimiento.
  3. TRUNCATE TABLE no se puede revertir porque provoca una confirmación implícita.
  4. Si está utilizando motores de almacenamiento compatibles con DDL atómico y el servidor se detiene durante las operaciones TRUNCATE TABLE, las transacciones se confirmarán por completo o se revertirán.
  5. Restablece los valores de las columnas AUTO_INCREAMENT al valor inicial.
  6. La instrucción TRUNCATE TABLE falla si ha creado claves externas en tablas InnoDB o NDB.
  7. Aunque la tabla o el índice estén dañados y la definición de la tabla sea válida, la instrucción TRUNCATE TABLE recrea una tabla vacía.
  8. La declaración TRUNCATE TABLE conserva la partición. Los archivos de índice y los datos se eliminarán, pero la definición de la partición no se verá afectada.
  9. Puede truncar una tabla InnoDB corrupta.
  10. Si está utilizando un espacio de tabla de archivo por tabla, la instrucción TRUNCATE TABLE descarta el espacio de tabla y crea uno nuevo.
  11. Podemos usar TRUNCATE TABLE en las tablas de resumen del esquema de rendimiento, pero no elimina los datos de las tablas. Restablece los valores de la columna de resumen a NULL o cero (0).

Diferencias entre declaraciones de tabla DELETE y TRUNCATE

Sr. Declaración DELETE Declaración TRUNCATE TABLE
1 La sentencia DELETE es una sentencia DML. Los cambios se registran en los registros binarios de la base de datos. La sentencia TRUNCATE TABLE es una sentencia DDL. La operación no se registra en los registros binarios.
2 La operación se puede deshacer. Esta operación no se puede deshacer.
3 Es más lento porque los cambios se registran en los registros binarios, se ejecutan los activadores DML. Es más rápido porque descarta la tabla existente y crea una nueva.
4 La declaración DELETE adquiere el bloqueo de nivel de fila. TRUNCATE TABLE bloquea las páginas de datos antes de eliminar los datos.
5 Puede eliminar registros específicos utilizando la cláusula WHERE Truncar tabla elimina todos los datos de la tabla.

Uso de la instrucción TRUNCATE TABLE en la práctica

La sintaxis de la instrucción Truncar tabla es la siguiente:

TRUNCATE TABLE [DatabaseName].[TABLE_NAME]

Nota:El nombre de la tabla de la que desea eliminar el registro se encuentra después de TRUNCATE TABLE declaración. Suponga que desea truncar el tblStudent mesa. La consulta debe ser la siguiente:

TRUNCATE TABLE tblStudent

Para la demostración, instalé MySQL 8.0 Server y creé una base de datos llamada studentsDB . Allí, he creado las tablas llamadas tblStudent , escuela tbl, y tblStudentCounsiler.

El siguiente script crea la base de datos y las tablas:

Create database studentDB;

CREATE TABLE studentDB.tblstudent (
  studentID integer NOT NULL AUTO_INCREMENT,
  StudentName varchar(255) DEFAULT NULL,
  StudentGrade char(1) DEFAULT NULL,
  SchoolID int,
  PRIMARY KEY (studentID)
)
ENGINE = INNODB;

CREATE TABLE studentDB.tblschool (
  SchoolID int NOT NULL AUTO_INCREMENT,
  SchoolName varchar(255) DEFAULT '',
  City varchar(255) DEFAULT '',
  PRIMARY KEY (SchoolID)
)
ENGINE = INNODB;

CREATE TABLE studentDB.tblStudentCounsiler (
  CounsilerID int NOT NULL AUTO_INCREMENT,
  CounsilerName varchar(255) DEFAULT '',
  PRIMARY KEY (CounsilerID)
)
ENGINE = INNODB;

Creé una clave externa en tblStudent tabla que hace referencia al SchoolID columna de tblStudent mesa.

El script para crear una clave foránea es el siguiente:

ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;

El diagrama ER está a continuación:

El siguiente script inserta los datos sumados en todas las tablas:

Use studentDB;

insert INTO tblSchool(SchoolName,City) VALUES ('Nalanda School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Sarvajanik School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Diwan Ballubhai','Ahmedabad');

INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nisarg Upadhyay','A',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nirali Upadhyay','A',2);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Manushi Upadhyay','C',3);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Dixit Upadhyay','B',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Bharti Upadhyay','A',1);

INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Raghav Dave');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Keyur Dalwadi');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Sawan Panchal');

Ahora comprendamos los casos de uso.

Primero, trunquemos el tblStudentCounsiler con la siguiente consulta:

mysql> truncate table studentdb.tblStudentCounsiler;

La salida :

Query OK, 0 rows affected (0.08 sec)

Ejecute la instrucción SELECT para ver los datos:

mysql> select * from studentdb.tblStudentCounsiler;

Resultado de la consulta:

Empty set (0.01 sec)

Como puede ver en la captura de pantalla anterior, el comando se ejecutó con éxito.

Ahora, intentemos truncar el tblSchool tabla con la siguiente consulta:

mysql> Truncate table tblSchool;

El siguiente error ocurre porque no podemos truncar una tabla a la que otra tabla hace referencia:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)

Para corregir este error, debemos soltar la clave externa. Ejecute la siguiente consulta para hacerlo:

mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;

Resultado de la consulta:

Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Una vez que se elimine la clave externa, ejecute el comando de tabla truncada:

mysql> Truncate table tblSchool;

Resultado de la consulta:

Query OK, 0 rows affected (0.08 sec)

Resumen

El artículo actual introdujo la sentencia TRUNCATE TABLE y sus características. Nos familiarizamos con las diferencias entre los comandos TRUNCATE TABLE y DELETE, y exploramos algunos ejemplos prácticos para aclarar los conceptos.