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?
mysql
truncate
drop-table
user1829823
fonte
fonte
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 deWHERE
ouJOIN
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ãoCREATE
,ALTER
ouDROP
, masTRUNCATE
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 aTRUNCATE
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 oTRUNCATE
processo deve impedir que outros processos atrapalhem a tabela para executar sua DDL.TRUNCATE
será mais rápido que oDELETE
, 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 aDROP
é 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.fonte
Embora eu não possa falar pelo MySQL, aqui está uma tabela rápida comparando alguns aspectos de truncar versus excluir no Oracle.
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,
fonte
DROP TABLE TableName
-> exclua a tabela do banco de dados.TRUNCATE TABLE TableName
-> exclua os dados da tabela, incondicionalmente ... e redefina oIDENTITY
valor inicial, se a tabela tiver umIDENTITY
campo.fonte
DELETE
: Comando DML, se você executar o comando delete, remova os únicos DATA sem despir a tabela Estrutura, podemos ROLLBACK os dados linha por linhaTRUNCATE
: 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 PAGEDROP
:, 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 dadosfonte