Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Entendendo o MySQL TRUNCATE TABLE por exemplos práticos


A instrução MySQL TRUNCATE TABLE é uma instrução DDL usada para remover todos os registros da tabela MySQL. Quando executamos este comando, ele descarta a tabela existente primeiro e depois cria uma nova tabela usando a definição de tabela. A sequência de execução da consulta do comando TRUNCATE TABLE é DROP TABLE e CREATE TABLE.

As características da instrução TRUNCATE TABLE são as seguintes:
  1. Quando executamos a instrução TRUNCATE TABLE em vez de excluir linhas, o MySQL descarta a tabela e a recria. É mais rápido que a instrução DELETE, principalmente para tabelas grandes.
  2. TRUNCATE TABLE ignora os acionadores DELETE para obter alto desempenho.
  3. TRUNCATE TABLE não pode ser revertida porque causa uma confirmação implícita.
  4. Se você estiver usando mecanismos de armazenamento com suporte para DDL atômico e o servidor for interrompido durante as operações de TRUNCATE TABLE, as transações serão totalmente confirmadas ou revertidas.
  5. Ele redefine os valores das colunas AUTO_INCREAMENT para o valor inicial.
  6. A instrução TRUNCATE TABLE falhará se você tiver criado chaves estrangeiras em tabelas InnoDB ou NDB.
  7. Mesmo que a tabela ou índice esteja corrompido e a definição da tabela seja válida, a instrução TRUNCATE TABLE recria uma tabela vazia.
  8. A instrução TRUNCATE TABLE preserva o particionamento. Os arquivos e dados de índice serão descartados, mas a definição da partição não será afetada.
  9. Você pode truncar uma tabela InnoDB corrompida.
  10. Se você estiver usando o espaço de tabela arquivo por tabela, a instrução TRUNCATE TABLE descarta o espaço de tabela e cria um novo.
  11. Podemos usar TRUNCATE TABLE nas tabelas de resumo do esquema de desempenho, mas isso não exclui os dados das tabelas. Ele redefine os valores da coluna de resumo para NULL ou Zero (0).

Diferenças entre instruções de tabela DELETE e TRUNCATE

Sr. Excluir declaração Instrução TRUNCATE TABLE
1 A instrução DELETE é uma instrução DML. As alterações são registradas nos logs binários do banco de dados. A instrução TRUNCATE TABLE é uma instrução DDL. A operação não é registrada nos logs binários.
2 A operação pode ser revertida. Esta operação não pode ser revertida.
3 É mais lento porque as alterações são registradas nos logs binários, os gatilhos DML são executados. É mais rápido porque descarta a tabela existente e cria uma nova.
4 A instrução DELETE adquire o bloqueio em nível de linha. TRUNCATE TABLE bloqueia as páginas de dados antes de remover os dados.
5 Você pode remover registros específicos usando a cláusula WHERE Truncar tabela remove todos os dados da tabela.

Usando a declaração TRUNCATE TABLE na prática


A sintaxe da instrução Truncate Table é a seguinte:
TRUNCATE TABLE [DatabaseName].[TABLE_NAME]

Observação:o nome da tabela da qual você deseja excluir o registro está após o TRUNCATE TABLE demonstração. Suponha que você queira truncar o tblStudent tabela. A consulta deve ser a seguinte:
TRUNCATE TABLE tblStudent

Para a demonstração, instalei o MySQL 8.0 Server e criei um banco de dados chamado studentsDB . Lá, criei as tabelas chamadas tblStudent , tblSchool, e tblStudentCounsiler.

O script a seguir cria o banco de dados e as tabelas:
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;

Criei uma chave estrangeira no tblStudent tabela que faz referência ao SchoolID coluna do tblStudent tabela.

O script para criar uma chave estrangeira é o seguinte:
ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;

O diagrama ER está abaixo:

O script a seguir insere os dados somados em todas as tabelas:
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');

Agora vamos entender os casos de uso.

Primeiro, vamos truncar o tblStudentCounsiler com a seguinte consulta:
mysql> truncate table studentdb.tblStudentCounsiler;

A saída :
Query OK, 0 rows affected (0.08 sec)

Execute a instrução SELECT para visualizar os dados:
mysql> select * from studentdb.tblStudentCounsiler;

Resultado da consulta:
Empty set (0.01 sec)

Como você pode ver na imagem acima, o comando foi executado com sucesso.

Agora, vamos tentar truncar o tblSchool tabela com a seguinte consulta:
mysql> Truncate table tblSchool;

O seguinte erro ocorre porque não podemos truncar uma tabela que está sendo referenciada por outra tabela:
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)

Para corrigir esse erro, devemos descartar a chave estrangeira. Execute a seguinte consulta para fazer isso:
mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;

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

Depois que a chave estrangeira for descartada, execute o comando truncate table:
mysql> Truncate table tblSchool;

Resultado da consulta:
Query OK, 0 rows affected (0.08 sec)

Resumo


O artigo atual apresentou a instrução TRUNCATE TABLE e suas características. Conhecemos as diferenças entre os comandos TRUNCATE TABLE e DELETE, além de explorar alguns exemplos práticos para esclarecer os conceitos.