O que faz o TRUNCATEdiferente 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 DROPexclui todos os dados e a tabela. Isso está correto?
O que faz o TRUNCATEdiferente 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 DROPexclui todos os dados e a tabela. Isso está correto?
Respostas:
EXCLUIR - IDIOMA DE MANIPULAÇÃO DE DADOS (DML)
A DELETEdeclaraçã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 é:
DELETEinstrução pode ser ajustada usando um predicado por meio de WHEREou JOINpara excluir algumas ou todas as linhas de uma tabela.DELETEinstrução será registrada pelo banco de dados e poderá ser revertida em uma transação se a instrução falhar.DELETEleva bloqueios no nível da linha nos dados que são excluídos, embora isso possa aumentar conforme necessário.DELETEpode 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, ALTERou DROP, mas TRUNCATEservem 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 TRUNCATEsão:
TRUNCATEnão pode ser refinado. Se for bem-sucedido, ele removerá todas as linhas da sua tabela.TRUNCATEnormalmente 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.)TRUNCATErequer um bloqueio de metadados da tabela para executar. Como isso é realmente implementado pode ser específico para o RDBMS, mas essencialmente o TRUNCATEprocesso deve impedir que outros processos atrapalhem a tabela para executar sua DDL.TRUNCATEserá mais rápido que o DELETE, mas menos seguro.TABELA DE QUEDA - IDIOMA DE DEFINIÇÃO DE DADOS (DDL)
DROP TABLEvai além de um, TRUNCATEna 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 IDENTITYvalor inicial, se a tabela tiver um IDENTITYcampo.
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