O que faz o TRUNCATE
diferente de cair?
Eu acredito que ele apaga todos os dados da tabela, mas mantém o nome da tabela no banco de dados, onde como DROP
exclui todos os dados e a tabela. Isso está correto?
O que faz o TRUNCATE
diferente de cair?
Eu acredito que ele apaga todos os dados da tabela, mas mantém o nome da tabela no banco de dados, onde como DROP
exclui todos os dados e a tabela. Isso está correto?
Respostas:
EXCLUIR - IDIOMA DE MANIPULAÇÃO DE DADOS (DML)
A DELETE
declaração em qualquer RDBMS é considerada uma declaração DML . Também conhecido como CRUD (Criar, Ler, Atualizar, Excluir), esse tipo de instrução destina-se a manipular dados em um banco de dados sem afetar a estrutura subjacente dos objetos. O que isso significa em termos práticos é:
DELETE
instrução pode ser ajustada usando um predicado por meio de WHERE
ou JOIN
para excluir algumas ou todas as linhas de uma tabela.DELETE
instrução será registrada pelo banco de dados e poderá ser revertida em uma transação se a instrução falhar.DELETE
leva bloqueios no nível da linha nos dados que são excluídos, embora isso possa aumentar conforme necessário.DELETE
pode ser "lento" (isso é relativo), mas mais seguro porque é refinado.TRUNCATE - IDIOMA DE DEFINIÇÃO DE DADOS (DDL)
TRUCNATE
é considerada uma instrução DDL , o que significa que se destina a alterar como os objetos são definidos em um banco de dados. Geralmente, as instruções DDL são CREATE
, ALTER
ou DROP
, mas TRUNCATE
servem a um propósito específico, o de "redefinir" uma tabela removendo todas as linhas. Os métodos disso diferem entre os mecanismos RDBMS e eu recomendaria examinar as especificidades do MySQL . As implicações práticas de a TRUNCATE
são:
TRUNCATE
não pode ser refinado. Se for bem-sucedido, ele removerá todas as linhas da sua tabela.TRUNCATE
normalmente não está registrado. Isso varia de acordo com o RDBMS e eu sugiro que você analise mais especificamente como o MySQL lida com isso. (Dica, isso varia de acordo com a versão.)TRUNCATE
requer um bloqueio de metadados da tabela para executar. Como isso é realmente implementado pode ser específico para o RDBMS, mas essencialmente o TRUNCATE
processo deve impedir que outros processos atrapalhem a tabela para executar sua DDL.TRUNCATE
será mais rápido que o DELETE
, mas menos seguro.TABELA DE QUEDA - IDIOMA DE DEFINIÇÃO DE DADOS (DDL)
DROP TABLE
vai além de um, TRUNCATE
na verdade ele remove a tabela do banco de dados completamente. Isso inclui remover todos os objetos associados, como índices e restrições. Se você soltasse uma tabela, não apenas removeria todos os dados, mas também a estrutura. Isso geralmente será feito quando uma tabela não for mais necessária. A principal preocupação é que, como a DROP
é DDL, você normalmente não pode desfazê-lo . Alguns mecanismos RDBMS permitem agrupar o DDL em uma transação para que você possa recuperá-lo, mas isso não é considerado uma prática recomendada e deve ser evitado.
Embora eu não possa falar pelo MySQL, aqui está uma tabela rápida comparando alguns aspectos de truncar versus excluir no 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 |
Informações compiladas deste livro: http://amzn.com/0470395125
Espero que isso ajude os usuários do Oracle que tropeçam nessa página, como eu fiz. Por favor, sinta-se à vontade para apontar quais desses pontos, se houver, são verdadeiros no MySQL,
DROP TABLE TableName
-> exclua a tabela do banco de dados.
TRUNCATE TABLE TableName
-> exclua os dados da tabela, incondicionalmente ... e redefina o IDENTITY
valor inicial, se a tabela tiver um IDENTITY
campo.
DELETE
: Comando DML, se você executar o comando delete, remova os únicos DATA sem despir a tabela Estrutura, podemos ROLLBACK os dados linha por linha
TRUNCATE
: Comando DDL, se você executar o comando Truncar remover os únicos DADOS sem despir a tabela Estrutura, não podemos reverter os dados truncar remover os dados de uma maneira PAGE BY PAGE
DROP
:, Comando DDL, se você executar o comando DROP, excluir (remover) os dados e a estrutura total da tabela também não podemos reverter os dados