Was macht das TRUNCATE
anders, um fallen zu lassen?
Ich glaube, es löscht alle Daten in der Tabelle, behält aber den Tabellennamen in der Datenbank, wobei as DROP
alle Daten und die Tabelle löscht. Ist das richtig ?
Was macht das TRUNCATE
anders, um fallen zu lassen?
Ich glaube, es löscht alle Daten in der Tabelle, behält aber den Tabellennamen in der Datenbank, wobei as DROP
alle Daten und die Tabelle löscht. Ist das richtig ?
Antworten:
LÖSCHEN - DATENMANIPULATIONSSPRACHE (DML)
Die DELETE
Anweisung in einem RDBMS wird als DML- Anweisung betrachtet. Diese Art von Anweisung wird auch als CRUD (Create, Read, Update, Delete) bezeichnet und dient dazu, Daten in einer Datenbank zu bearbeiten, ohne die zugrunde liegende Struktur der Objekte zu beeinflussen. In der Praxis bedeutet dies:
DELETE
Anweisung kann mithilfe eines Prädikats über WHERE
oder JOIN
zum Löschen einiger oder aller Zeilen in einer Tabelle verfeinert werden.DELETE
Anweisung wird von der Datenbank protokolliert und kann innerhalb einer Transaktion zurückgesetzt werden, wenn die Anweisung fehlschlägt.DELETE
werden Sperren für die gelöschten Daten auf Zeilenebene vorgenommen, dies kann jedoch bei Bedarf höher eskalieren.DELETE
kann es "langsam" sein (dies ist relativ), aber sicherer, weil es feinkörnig ist.TRUNCATE - DATENDEFINITIONSSPRACHE (DDL)
TRUCNATE
wird als DDL- Anweisung betrachtet, was bedeutet, dass die Definition von Objekten in einer Datenbank geändert werden soll. Normalerweise DDL - Anweisungen sind CREATE
, ALTER
oder DROP
aber TRUNCATE
dient einem bestimmten Zweck, der von „Rücksetzen von “ einer Tabelle alle Zeilen zu entfernen. Die Methoden hierfür unterscheiden sich zwischen den RDBMS-Engines, und ich würde empfehlen, die Besonderheiten von MySQL zu betrachten . Die praktischen Auswirkungen von a TRUNCATE
sind:
TRUNCATE
kann nicht feinkörnig sein. Bei Erfolg werden alle Zeilen aus Ihrer Tabelle entfernt.TRUNCATE
wird normalerweise nicht protokolliert. Dies variiert je nach RDBMS, und ich würde vorschlagen, dass Sie sich genauer ansehen, wie MySQL damit umgeht. (Hinweis, es variiert je nach Version.)TRUNCATE
Für die Ausführung ist eine Tabellenmetadatensperre erforderlich. Wie dies tatsächlich implementiert wird, kann für RDBMS spezifisch sein, aber im Wesentlichen TRUNCATE
muss der Prozess verhindern, dass andere Prozesse mit der Tabelle verwechseln, um ihre DDL auszuführen.TRUNCATE
schneller als a DELETE
, aber weniger sicher.DROP TABLE - DATENDEFINITIONSSPRACHE (DDL)
DROP TABLE
geht weiter als a, TRUNCATE
indem es die Tabelle tatsächlich vollständig aus der Datenbank entfernt. Dies umfasst das Entfernen aller zugeordneten Objekte wie Indizes und Einschränkungen. Wenn Sie eine Tabelle löschen, entfernen Sie nicht nur alle Daten, sondern auch die Struktur. Dies erfolgt normalerweise, wenn eine Tabelle nicht mehr benötigt wird. Das Hauptanliegen ist, dass a DROP
DDL normalerweise nicht rückgängig machen kann . Bei einigen RDBMS-Engines können Sie DDL in eine Transaktion einbinden, damit Sie sie zurücksetzen können. Dies wird jedoch nicht als bewährte Methode angesehen und sollte vermieden werden.
Obwohl ich nicht für MySQL sprechen kann, finden Sie hier eine kurze Tabelle, in der einige Aspekte von Abschneiden und Löschen in Oracle verglichen werden.
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 |
Aus diesem Buch zusammengestellte Informationen: http://amzn.com/0470395125
Hoffentlich kann dies allen Oracle-Benutzern helfen, die wie ich über diese Seite stolpern. Bitte zögern Sie nicht, darauf hinzuweisen, welche dieser Punkte in MySQL zutreffen.
DROP TABLE TableName
-> Tabelle aus der Datenbank löschen.
TRUNCATE TABLE TableName
-> Löschen Sie die Daten der Tabelle unbedingt ... und setzen Sie den IDENTITY
Startwert zurück, wenn die Tabelle ein IDENTITY
Feld enthält.
DELETE
: DML-Befehl, wenn Sie den Löschbefehl ausführen, entfernen Sie die einzigen DATEN, ohne die Tabellenstruktur zu entkleiden. Wir können die Daten zeilenweise ROLLBACKEN
TRUNCATE
: DDL-Befehl, wenn Sie den Befehl "Abschneiden" ausführen, entfernen Sie die einzigen DATEN, ohne die Tabelle zu entkleiden
DROP
:, DDL-Befehl, wenn Sie den DROP-Befehl zum Löschen (Entfernen) der Daten und der gesamten Tabellenstruktur ausführen, können wir die Daten auch nicht zurücksetzen