it-swarm.com.de

Unterschied zwischen DROP und TRUNCATE

Was macht das TRUNCATE anders, um es fallen zu lassen?

Ich glaube, es löscht alle Daten in der Tabelle, behält aber den Tabellennamen in der Datenbank bei, wobei DROP alle Daten und die Tabelle löscht. Ist das richtig ?

8
user1829823

DELETE - DATA MANIPULATION LANGUAGE (DML)

Die Anweisung DELETE 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:

  • Eine DELETE -Anweisung kann mithilfe eines Prädikats über WHERE oder JOIN feinabgestimmt werden, um einige oder alle Zeilen in einer Tabelle zu löschen.
  • Eine DELETE -Anweisung wird von der Datenbank protokolliert und kann innerhalb einer Transaktion zurückgesetzt werden, wenn die Anweisung fehlschlägt.
  • In der Regel sperrt ein DELETE die gelöschten Daten auf Zeilenebene, obwohl dies bei Bedarf höher eskalieren kann.
  • Aufgrund des Transaktionsaufwands kann DELETE "langsam" sein (dies ist relativ), aber sicherer, weil es feinkörnig ist.

TRUNCATE - DATA DEFINITION LANGUAGE (DDL)

TRUCNATE wird als DDL Anweisung betrachtet, was bedeutet, dass die Definition von Objekten in einer Datenbank geändert werden soll. Normalerweise sind DDL-Anweisungen CREATE, ALTER oder DROP, aber TRUNCATE dient einem bestimmten Zweck, nämlich dem "Zurücksetzen" einer Tabelle durch Entfernen aller Reihen. Die Methoden hierfür unterscheiden sich zwischen den RDBMS-Engines, und ich würde empfehlen, die Besonderheiten von MySQL zu betrachten. Die praktischen Implikationen eines 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 erfordert eine Tabellenmetadatensperre, um ausgeführt zu werden. Wie dies tatsächlich implementiert wird, kann RDBMS-spezifisch sein, aber im Wesentlichen muss der Prozess TRUNCATE verhindern, dass andere Prozesse mit der Tabelle verwechseln, um ihre DDL auszuführen.
  • Da es (normalerweise) nicht protokolliert wird und keine Prädikate verwendet, ist ein TRUNCATE schneller als ein DELETE, aber weniger sicher.

DROP TABLE - DATA DEFINITION LANGUAGE (DDL)

DROP TABLE geht weiter als ein 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 Sie normalerweise nicht rückgängig machen können , da ein DROP DDL ist. 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.

22
Mike Fal

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.

5
MollyOQ

DROP TABLE TableName -> Tabelle aus der Datenbank löschen.

TRUNCATE TABLE TableName -> Löschen Sie die Daten der Tabelle unbedingt ... und setzen Sie den Startwert IDENTITY zurück, wenn die Tabelle ein Feld IDENTITY enthält.

2
Reha Ozenc
  • 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 Tabellenstruktur 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

1
Sanjeev Reddy