Qu'est-ce que le TRUNCATE
faire différemment de laisser tomber?
Je crois qu'il supprime toutes les données de la table mais conserve le nom de la table dans la base de données, où as DROP
supprime toutes les données et la table. Est-ce correct ?
Qu'est-ce que le TRUNCATE
faire différemment de laisser tomber?
Je crois qu'il supprime toutes les données de la table mais conserve le nom de la table dans la base de données, où as DROP
supprime toutes les données et la table. Est-ce correct ?
Réponses:
SUPPRIMER - LANGUE DE MANIPULATION DES DONNÉES (DML)
L' DELETE
instruction de tout SGBDR est considérée comme une instruction DML . Également connu sous le nom de CRUD (créer, lire, mettre à jour, supprimer), ce type d'instruction est destiné à manipuler des données dans une base de données sans affecter la structure sous-jacente des objets. En termes pratiques, cela signifie:
DELETE
instruction peut être affinée à l'aide d'un prédicat via WHERE
ou JOIN
pour supprimer certaines ou toutes les lignes d'une table.DELETE
instruction sera enregistrée par la base de données et peut être annulée dans une transaction si l'instruction échoue.DELETE
prend des verrous au niveau des lignes sur les données supprimées, bien que cela puisse augmenter si nécessaire.DELETE
peut être "lent" (c'est relatif), mais plus sûr car il est à grain fin.TRUNCATE - LANGUE DE DÉFINITION DES DONNÉES (DDL)
TRUCNATE
est considéré comme une instruction DDL , ce qui signifie qu'il est destiné à modifier la façon dont les objets sont définis dans une base de données. Habituellement, les instructions DDL sont CREATE
, ALTER
ou DROP
, mais ont TRUNCATE
un objectif particulier, celui de "réinitialiser" une table en supprimant toutes les lignes. Les méthodes de cela diffèrent entre les moteurs RDBMS et je recommanderais de regarder les spécificités de MySQL . Les implications pratiques de a TRUNCATE
sont:
TRUNCATE
ne peut pas être à grain fin. En cas de succès, il supprimera toutes les lignes de votre table.TRUNCATE
n'est généralement pas enregistré. Cela varie selon le SGBDR et je vous suggère de regarder plus spécifiquement comment MySQL le gère. (Indice, cela varie selon la version.)TRUNCATE
nécessite un verrou de métadonnées de table pour s'exécuter. La façon dont cela est réellement implémenté peut être spécifique au SGBDR, mais essentiellement le TRUNCATE
processus doit empêcher d'autres processus de nettoyer la table afin d'exécuter son DDL.TRUNCATE
sera plus rapide que a DELETE
, mais moins sûr.TABLEAU DROP - LANGUE DE DÉFINITION DES DONNÉES (DDL)
DROP TABLE
va plus loin que TRUNCATE
dans la mesure où il supprime complètement la table de la base de données. Cela inclut la suppression de tous les objets associés, tels que les index et les contraintes. Si vous supprimez une table, vous supprimez non seulement toutes les données, mais également la structure. Cela se fera généralement lorsqu'une table n'est plus nécessaire. La principale préoccupation est que, comme un DROP
est DDL, vous ne pouvez généralement pas l'annuler . Certains moteurs SGBDR vous permettront d'encapsuler DDL dans une transaction afin que vous puissiez la restaurer, mais cela n'est pas considéré comme la meilleure pratique et doit être évité.
Bien que je ne puisse pas parler pour MySQL, voici un tableau rapide comparant certains aspects de la troncature et de la suppression dans 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 |
Informations compilées à partir de ce livre: http://amzn.com/0470395125
Espérons que cela puisse aider les utilisateurs Oracle qui tombent sur cette page, comme je l'ai fait. N'hésitez pas à indiquer lesquels, le cas échéant, de ces points sont valables dans MySQL,
DROP TABLE TableName
-> supprimer la table de la base de données.
TRUNCATE TABLE TableName
-> supprimer les données de la table, sans condition ... et réinitialiser la IDENTITY
valeur de départ, si la table a un IDENTITY
champ.
DELETE
: Commande DML, si vous exécutez la commande delete, supprimez les seules données sans déshabiller la structure de la table, nous pouvons ROLLBACK les données ligne par ligne
TRUNCATE
: Commande DDL, si vous exécutez la commande Tronquer, supprimez les seules DONNÉES sans déshabiller la table Structure nous ne pouvons pas restaurer les données tronquer supprimer les données de manière PAGE PAR PAGE tronquer est plus rapide que supprimer la requête
DROP
:, Commande DDL, si vous exécutez la commande DROP, supprimez (supprimez) les données et la structure totale de la table, nous ne pouvons pas non plus restaurer les données