Frage

Was ist der Unterschied zwischen TRUNCATE und DELETE in SQL?

Wenn Ihre Antwort-Plattform spezifisch ist, wenden Sie sich bitte, dass an.

War es hilfreich?

Lösung

Hier ist eine Liste von Unterschieden. Ich habe hervorgehoben Oracle-spezifische Funktionen, und hoffentlich die Gemeinschaft kann auch in anderen Herstellern spezifische Differenz hinzuzufügen. Unterschiede, die für die meisten Hersteller gemeinsam sind, können direkt unter den Überschriften gehen, mit Unterschieden unten hervorgehoben.


Allgemeine Übersicht

Wenn Sie alle Zeilen aus einer Tabelle schnell löschen, und Sie sind wirklich sicher, dass Sie es tun wollen, und Sie haben keine Fremdschlüssel für die Tabellen, dann ein TRUNCATE wird wahrscheinlich schneller sein als ein DELETE.

Verschiedene systemspezifische Aspekte berücksichtigt werden müssen, wie nachfolgend beschrieben.


Statement Typ

Löschen DML ist, Kürzen ist DDL ( Was ist DDL und DML? )


Commit und Rollback

Variable vom Anbieter

SQL * Server

Kürzen werden kann rückgängig gemacht.

PostgreSQL

Kürzen werden kann rückgängig gemacht.

Oracle

Da ein TRUNCATE DDL ist es beinhaltet zwei Commits, eine vor und eine nach der Ausführung der Anweisung. Kürzen kann daher nicht rückgängig gemacht werden, und ein Fehler in dem truncate Prozess wird ein ohnehin ausgegeben begehen.

Allerdings siehe unten Rückblick.


Space Gewinnung

Löschen Raum nicht erholen, Kürzen erholt Raum

Oracle

Wenn Sie die REUSE STORAGE-Klausel verwenden, dann werden die Datensegmente nicht de-zugeordnet, die geringfügig effizienter sein kann, wenn die Tabelle mit Daten neu geladen werden ist. Die Hochwassermarke zurückgesetzt wird.


Zeile Anwendungsbereich

Löschen kann verwendet werden, um alle Zeilen zu entfernen oder nur eine Teilmenge der Zeilen. Kürzen entfernt alle Zeilen.

Oracle

Wenn eine Tabelle partitioniert ist, können die einzelnen Partitionen isoliert abgeschnitten werden, so dass eine teilweise Entfernung der Daten der Tabelle ist alles möglich.


Objekttypen

Löschen kann innerhalb eines Clusters auf Tabellen und Tabellen angewendet werden. Kürzen gilt nur für Tabellen oder den gesamten Cluster. (Sein mögen Oracle-spezifisch)


Data Object Identität

Oracle

Löschen nicht das Datenobjekt-ID nicht beeinflusst, aber truncate ordnet ein neues Datenobjekt-ID es sei denn, hat es nie einen Einsatz gegen den Tisch, seit seiner Gründung Selbst ein einzelner Einsatz, die zurückgesetzt wird, verursachen eine neue Datenobjekt-ID auf Verkürzungs zugewiesen werden.


Rückblick (Oracle)

Rückblick funktioniert über Löschungen, aber ein truncate verhindert Rückblende zu den Zuständen vor der Operation.

Doch von 11gR2 der RüCKBLICK ARCHIV Funktion ermöglicht dies, außer in Express Edition

Verwendung von RüCKBLICK in Oracle http://docs.oracle.com/cd/ E11882_01 / appdev.112 / e41502 / adfns_flashback.htm # ADFNS638


Berechtigungen

Variable

Oracle

Löschen kann auf einen Tisch zu einem anderen Benutzer oder eine Rolle gewährt werden, aber gestutzt nicht ohne Verwendung eines DROP ANY TABLE Zuschusses werden kann.


Redo / Undo

Löschen erzeugt eine kleine Menge von Redo und eine große Menge an rückgängig zu machen. Kürzen erzeugt eine vernachlässigbare Menge von jedem.


Indizes

Oracle

Ein Abschneidevorgang unbrauchbar macht Indizes verwendbar wieder. Löschen nicht.


Fremdschlüssel

Ein truncate kann nicht angewendet werden, wenn ein Fremdschlüssel-Referenzen in der Tabelle aktiviert ist. Die Behandlung mit Lösch hängt von der Konfiguration des Fremdschlüssels.


Table Locking

Oracle

Kürzen erfordert eine exklusive Tabellensperre, löschen erfordert eine gemeinsame Tabellensperre. Daher Tabellensperren zu deaktivieren auf einem Tisch ist eine Art und Weise Leerungsoperationen zu verhindern.


Trigger

DML-Trigger nicht ausgelöst auf einem truncate.

Oracle

DDL-Trigger zur Verfügung.


Remote Execution

Oracle

Kürzen kann nicht über einen Datenbank-Link ausgegeben werden.


Identity Columns

SQL * Server

Kürzen setzt die Sequenz für die IDENTITY-Spaltentypen, nicht gelöscht.


Ergebnismenge

In den meisten Implementierungen eine DELETE Anweisung an den Client die Zeilen zurückgeben kann, die gelöscht wurden.

z. in einer Oracle PL / SQL-Unterprogramm können Sie:

DELETE FROM employees_temp
WHERE       employee_id = 299 
RETURNING   first_name,
            last_name
INTO        emp_first_name,
            emp_last_name;

Andere Tipps

Der Unterschied zwischen truncate und löschen wird im Folgenden aufgeführt:

+----------------------------------------+----------------------------------------------+
|                Truncate                |                    Delete                    |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing     | We can Rollback after delete.                |
| Truncate.                              |                                              |
|                                        |                                              |
| Example:                               | Example:                                     |
| BEGIN TRAN                             | BEGIN TRAN                                   |
| TRUNCATE TABLE tranTest                | DELETE FROM tranTest                         |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
| ROLLBACK                               | ROLLBACK                                     |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table.      | Delete does not reset identity of table.     |
+----------------------------------------+----------------------------------------------+
| It locks the entire table.             | It locks the table row.                      |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language)      | Its DML(Data Manipulation Language)          |
| command.                               | command.                                     |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it.     | We can use WHERE to filter data to delete.   |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate.   | Trigger is fired.                            |
+----------------------------------------+----------------------------------------------+
| Syntax :                               | Syntax :                                     |
| 1) TRUNCATE TABLE table_name           | 1) DELETE FROM table_name                    |
|                                        | 2) DELETE FROM table_name WHERE              |
|                                        |    example_column_id IN (1,2,3)              |
+----------------------------------------+----------------------------------------------+
  

DROP

     

Der DROP-Befehl entfernt eine Tabelle aus der Datenbank. Alle Tische Zeilen, Indizes und Privilegien werden ebenfalls entfernt. Keine DML-Trigger werden gefeuert. Der Vorgang kann nicht mehr rückgängig gemacht werden.

     

TRUNCATE

     

TRUNCATE entfernt alle Zeilen aus einer Tabelle. Der Vorgang kann nicht mehr rückgängig gemacht werden und keine Trigger gefeuert werden. Als solches ist TRUCATE schneller und nicht so viel rückgängig gemacht Raum als DELETE verwenden.

     

DELETE

     

Der DELETE-Befehl wird verwendet, um Zeilen aus einer Tabelle zu entfernen. Eine WHERE-Klausel verwendet werden kann, entfernen nur einige Zeilen. Wenn keine WHERE-Bedingung angegeben ist, werden alle Zeilen entfernt. Nachdem ein Löschvorgang durchführen müssen Sie die Transaktion COMMIT oder ROLLBACK die Änderung dauerhaft zu machen oder sie rückgängig zu machen. Beachten Sie, dass dieser Vorgang wird alle DELETE-Trigger auf der Tabelle führen zu schießen.

Von: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

Alle guten Antworten, auf die ich muss hinzufügen:

Da TRUNCATE TABLE ist eine DDL ( Daten Defination Sprache ), kein DML ( Data Manipulation Langauge ) Befehl, nicht die Delete Triggers nicht ausgeführt werden.

Zusammenfassung von Delete Vs Kürzen in SQL Server
Für die kompletten Artikel unter folgendem Link: http: // codaffection .com / sQL-Server-Artikel / löschen-vs-truncate-in-sQL-Server /

 image description hier

von Dotnet Mob Artikel Genommen: löschen Vs Truncate in SQL Server

Mit SQL Server oder MySQL, wenn es eine PK mit Autoinkrement ist, gestutzt wird der Zähler zurückgesetzt.

„Kürzen nichts log“ ist richtig. Ich würde noch weiter gehen:

Kürzen wird im Rahmen einer Transaktion nicht ausgeführt.

Der Geschwindigkeitsvorteil von truncate über löschen sollte klar sein. Dieser Vorteil reicht von trivial bis enorm, je nach Ihrer Situation.

Allerdings habe ich unfreiwillig gesehen truncate referentielle Integrität brechen und verletzen andere Einschränkungen. Die Macht, die Sie durch Ändern von Daten außerhalb einer Transaktion erhalten will, muß gegen die Verantwortung ausgeglichen werden, die Sie erben, wenn Sie den Drahtseilakt ohne Netz gehen.

Ja, DELETE ist langsamer, TRUNCATE ist schneller. Warum?

DELETE müssen die Datensätze, überprüfen Einschränkungen lesen, aktualisieren Sie den Block, zu aktualisieren Indizes und Redo generieren / rückgängig gemacht werden. All das braucht Zeit.

TRUNCATE paßt einfach einen Zeiger in der Datenbank für die Tabelle (die High-Water-Mark) und puh! die Daten weg.

Dies ist Oracle spezifisch, AFAIK.

TRUNCATE ist die DDL-Anweisung während DELETE eine DML-Anweisung ist. Im Folgenden sind die Unterschiede zwischen den beiden:

  1. Als TRUNCATE ein DDL ist ( Datendefinitionssprache ) statement es nicht erfordern eine Verpflichtung, die Änderungen dauerhaft zu machen. Und das ist der Grund, warum von truncate gelöschten Zeilen nicht rollbacked werden können. Auf der anderen Seite DELETE ist eine DML ( Datenbearbeitungssprache ) Aussage daher ausdrücklich verpflichten, erfordert zu machen seine Wirkung dauerhaft.

  2. TRUNCATE entfernt immer alle Zeilen aus einer Tabelle, die Tabelle leer und die Tabellenstruktur intakt gelassen wird, während DELETE bedingt entfernen, wenn die where-Klausel verwendet wird.

  3. Die Zeilen von TRUNCATE TABLE Anweisung gelöscht können nicht wiederhergestellt werden und Sie können die where-Klausel in der TRUNCATE Anweisung nicht angegeben werden.

  4. TRUNCATE Aussagen nicht Feuer löst ab auf DELETE Anweisung auf DELETE-Trigger gegen

Hier ist die sehr gute Verbindung für das Thema relevant.

Wenn aus Versehen Sie alle Daten aus der Tabelle entfernt mit Löschen / Kürzen. Sie können engagierte Transaktion Rollback. Wiederherstellen der letzten Sicherung und Transaktionsprotokoll bis zu dem Zeitpunkt ausgeführt, wenn Löschen / Kürzen passieren wird.

Die zugehörigen Informationen unter einer Blog-Post

  

Während auf Datenbank arbeiten, verwenden wir löschen und Kürzen ohne   zu wissen, die Unterschiede zwischen ihnen. In diesem Artikel werden wir diskutieren   der Unterschied zwischen Löschen und Kürzen in Sql.

     

Löschen:

     
      
  • Löschen ist ein DML-Befehl.
  •   
  • Löschen Anweisung ausgeführt wird eine Zeilensperre verwendet wird, jede Zeile in der Tabelle zum Löschen gesperrt.
  •   
  • Wir können angeben Filter in where-Klausel.
  •   
  • Es löscht angegebene Daten, wenn in dem Zustand vorhanden ist.
  •   
  • Löschen Aktivitäten einen Trigger, da der Betrieb einzeln angemeldet sind.
  •   
  • Langsamer als Kürzen, weil es hält Protokolle
  •   
     

Kürzen

     
      
  • Kürzen ist ein DDL-Befehl.
  •   
  • Kürzen Tabelle die Tabelle und Seite immer sperren, aber nicht jedes row.As es alle Daten entfernt.
  •   
  • Kann nicht Wo Bedingung verwenden.
  •   
  • Es Entfernt alle Daten.
  •   
  • Kürzen Tabelle kann einen Trigger nicht aktivieren, da der Vorgang nicht einzelne Zeilenlöschungen nicht einloggen.
  •   
  • Faster in Leistung klug, weil sie halten keine Protokolle.
  •   
     

Hinweis: Löschen und Kürzen beide zurückgesetzt, wenn verwendet werden kann, mit   Transaktion. Wenn Transaktion erfolgt ist, begangen bedeutet, dann können wir nicht   Rollbacks Kürzen Befehl, aber wir können noch ein Rollback-Befehl löschen   von Log-Dateien, wie löschen schreiben sie in Log-Datei im Fall zeichnet ist es   benötigt in Zukunft aus den Log-Dateien rückgängig zu machen.

     

Wenn Sie eine Fremdschlüsselbedingung haben, die sich auf die Tabelle, die Sie   trunkieren versuchen, funktioniert dies nicht, auch wenn die aufgerufene Tabelle nicht hat   Daten enthält. Dies liegt daran, die Fremdschlüsselprüfung mit DDL erfolgt   statt DML. Dies kann dazu gekommen werden, indem vorübergehend das Deaktivieren   Fremdschlüssel (n) auf den Tisch.

     

Löschen Tabelle ist eine protokollierte Operation. So ist die Streichung jeder Reihe bekommt   im Transaktionsprotokoll, protokolliert, die es langsam macht. Kürzt Tisch   auch löscht alle Zeilen in einer Tabelle, aber es wird die Löschung nicht anmelden   stattdessen jede Zeile es protokolliert die Aufhebung der Zuordnung der Datenseiten der   Tisch, der macht es schneller.

     

~ Wenn aus Versehen Sie alle Daten aus der Tabelle entfernt mit   Löschen / Kürzen. Sie können engagierte Transaktion Rollback. Wiederherstellung der   letzte Sicherung und führte Transaktionsprotokoll bis zu dem Zeitpunkt, wenn Löschen / Truncate   passieren wird.

In SQL Server 2005 Ich glaube, dass Sie können Rollback eine truncate

TRUNCATE kann wieder in einer Transaktion, wenn gewickelt wird gerollt.

Bitte beachten Sie die beiden Referenzen unten und testen Sie sich: -

http://blog.sqlauthority.com/2007/12/26/sql-server-truncate-cant-be-rolled-back-using-log-files-after-transaction -session-is-geschlossen /

http://sqlblog.com/blogs/kalen_delaney/archive/2010/10/12/tsql-tuesday-11-rolling-back-truncate-table.aspx

Die TRUNCATE vs. DELETE ist eine der berüchtigten Fragen während SQL-Interviews. So stellen Sie sicher, dass Sie es erklären, richtig mit dem Interviewer oder es könnte Sie den Job kosten. Das Problem ist, dass nicht viele sind sich bewusst, so wahrscheinlich werden sie die Antwort als falsch betrachten, wenn Sie ihnen sagen, dass JA Kürzen zurückgerollt werden kann.

  

DELETE

     

Der DELETE-Befehl wird verwendet, um Zeilen aus einer Tabelle zu entfernen. Eine WHERE-Klausel verwendet werden kann, entfernen nur einige Zeilen. Wenn keine WHERE-Bedingung angegeben ist, werden alle Zeilen entfernt. Nachdem ein Löschvorgang durchführen müssen Sie die Transaktion COMMIT oder ROLLBACK die Änderung dauerhaft zu machen oder sie rückgängig zu machen. Beachten Sie, dass dieser Vorgang wird alle DELETE-Trigger auf der Tabelle führen zu schießen.

     

TRUNCATE

     

TRUNCATE entfernt alle Zeilen aus einer Tabelle. Der Vorgang kann nicht mehr rückgängig gemacht werden und keine Trigger gefeuert werden. Als solches ist TRUCATE schneller und nicht so viel rückgängig gemacht Raum als DELETE verwenden.

     

DROP

     

Der DROP-Befehl entfernt eine Tabelle aus der Datenbank. Alle Tische Zeilen, Indizes und Privilegien werden ebenfalls entfernt. Keine DML-Trigger werden gefeuert. Der Vorgang kann nicht mehr rückgängig gemacht werden.

     
     

DROP und TRUNCATE sind DDL-Befehle, während DELETE ist ein DML-Befehl. Daher DELETE-Operationen rückgängig gemacht werden können (rückgängig gemacht), während DROP und TRUNCATE-Operationen können nicht rückgängig gemacht werden.

Von: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

Eine kleine Korrektur auf die ursprüngliche Antwort - löschen erzeugt auch erhebliche Mengen an Redo (wie Undo selbst durch Redo geschützt ist). Dies kann von Autotrace Ausgabe zu sehen:

SQL> delete from t1;

10918 rows deleted.

Elapsed: 00:00:00.58

Execution Plan
----------------------------------------------------------
   0      DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1)
   1    0   DELETE OF 'T1'
   2    1     TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1)




Statistics
----------------------------------------------------------
         30  recursive calls
      12118  db block gets
        213  consistent gets
        142  physical reads
    3975328  redo size
        441  bytes sent via SQL*Net to client
        537  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
      10918  rows processed

Hier ist meine ausführliche Antwort auf die Differenz zwischen DELETE und TRUNCATE in SQL Server

Entfernen Daten : Das erste, was zuerst, können sowohl die Zeilen aus der Tabelle zu entfernen, verwendet werden
. Aber ein DELETE kann verwendet werden, um die Zeilen zu entfernen, nicht nur aus einer Tabelle, sondern auch aus einer Sicht oder das Ergebnis einer OPENROWSET oder OPENQUERY abhängig vom Provider Fähigkeit.

FROM-Klausel : Mit DELETE Sie auch Zeilen aus einer Tabelle / View löschen / rowset_function_limited aus einer anderen Tabelle auf Zeilen basierend durch eine andere Klausel. In der FROM-Klausel können Sie auch schreiben normale Joinbedingungen. Eigentlich können Sie eine DELETE-Anweisung aus einer SELECT-Anweisung erstellen, die keine Aggregatfunktionen enthalten durch Ersetzen SELECT mit DELETE und Entfernen von Spaltennamen.
Mit TRUNCATE können Sie das nicht tun.

WHERE : Ein TRUNCATE nicht haben kann, wo die Bedingungen, sondern ein löschen. Das bedeutet, dass mit TRUNCATE können Sie nicht eine bestimmte Zeile oder einer bestimmten Gruppe von Zeilen löschen. TRUNCATE TABLE auf die DELETE-Anweisung ohne WHERE-Klausel ähnlich ist.

Performance : TRUNCATE TABLE ist schneller und weniger System und Transaktionsprotokoll Ressourcen verwendet. Und einer der Gründe ist Schlösser entweder durch Anweisungen verwendet. Die DELETE-Anweisung ausgeführt wird, eine Zeilensperre verwendet wird, jede Zeile in der Tabelle ist zum Löschen gesperrt. TRUNCATE TABLE immer sperrt die Tabelle und Seite aber nicht jede Zeile.

Transaktionsprotokoll : DELETE-Anweisung entfernt Zeilen einen nach dem anderen und macht einzelne Einträge im Transaktionsprotokoll für jede Zeile
. TRUNCATE TABLE löscht die Daten durch die Datenseiten Aufheben der Zuordnung verwendet, um die Tabellendaten zu speichern und Datensätze nur die Seite Zuordnungsaufhebungen im Transaktionsprotokoll.

Seiten : Nach einer DELETE-Anweisung ausgeführt wird, nach wie vor die Tabelle leer Seiten enthält. TRUNCATE entfernt die Daten durch die Datenseiten Aufheben der Zuordnung verwendet, um die Tabellendaten zu speichern.

Trigger : TRUNCATE nicht aktiviert die Lösch Auslöser auf dem Tisch. Sie müssen also sehr vorsichtig sein, während TRUNCATE verwendet wird. Man soll nie eine TRUNCATE verwenden, wenn DELETE-Trigger auf der Tabelle definiert ist eine automatische Bereinigung oder Protokollierung Aktion zu tun, wenn Zeilen gelöscht werden.

Identity Spalte : Mit TRUNCATE, wenn die Tabelle eine Identitätsspalte enthält, wird der Zähler für diese Spalte auf den Startwert zurückgesetzt wird für die Spalte definiert. Wenn kein Saatgut definiert wurde, wird der Standardwert 1 verwendet. DELETE nicht die Identität Zähler zurückgesetzt. Also, wenn Sie die Identität Zähler beibehalten möchten, verwenden Sie stattdessen DELETE.

Replikation :. DELETE kann gegen Tabelle in der Transaktionsreplikation verwendet werden oder Mergereplikation
Während TRUNCATE kann nicht gegen die in der Transaktionsreplikation oder Mergereplikation beteiligten Tabellen verwendet werden.

Zurücksetzen : DELETE-Anweisung kann rückgängig gemacht werden
. TRUNCATE kann auch vorgesehen gerollt wird wieder wird es in einem Transaktionsblock eingeschlossen und Sitzung nicht geschlossen ist. Sobald Sitzung geschlossen wird man nicht in der Lage sein TRUNCATE rückgängig zu machen.

Einschränkungen : Die DELETE-Anweisung fehlschlagen, wenn es einen Trigger verletzt oder versucht, eine Reihe von Daten in einer anderen Tabelle mit einer FOREIGN KEY-Einschränkung verwiesen zu entfernen. Wenn die DELETE mehr Zeilen entfernt, und eine der entfernt Reihen gegen einen Trigger oder Einschränkung, wird die Anweisung abgebrochen, wird ein Fehler zurückgegeben, und keine Zeilen werden entfernt.
Und wenn DELETE gegen Ansicht verwendet wird, muss diese Ansicht eine aktualisierbare Ansicht sein. TRUNCATE kann nicht gegen die in indizierte Sicht verwendet Tabelle verwendet werden.
TRUNCATE kann nicht gegen die durch eine FOREIGN KEY-Einschränkung referenzierte Tabelle verwendet werden, es sei denn, eine Tabelle, die einen Fremdschlüssel, dass Verweise selbst hat.

Der größte Unterschied ist, dass truncate nicht protokollierter Betrieb ist, während löschen ist.

Einfach bedeutet dies, dass im Falle eines Datenbankabsturz, können Sie die Daten nicht auf von truncate betrieben erholen, aber mit löschen Sie können.

Weitere Details hier

DELETE-Anweisung: Dieser Befehl löscht nur die Zeilen aus der Tabelle auf der Grundlage der gegebenen Bedingung in der where-Klausel oder löscht alle Zeilen aus der Tabelle, wenn keine Bedingung angegeben ist. Aber es nicht den Platz frei die die Tabelle enthält.

Die Syntax eines SQL-DELETE-Anweisung lautet:

DELETE FROM tabelle [WHERE Bedingung];

TRUNCATE-Anweisung. Mit diesem Befehl kann alle Zeilen aus der Tabelle löschen und den Platz freigeben, die Tabelle mit

Löschen

DELETE is a DML command
DELETE you can rollback
Delete = Only Delete- so it can be rolled back
In DELETE you can write conditions using WHERE clause
Syntax – Delete from [Table] where [Condition]

TRUNCATE

TRUNCATE is a DDL command
You can't rollback in TRUNCATE, TRUNCATE removes the record permanently
Truncate = Delete+Commit -so we can't roll back
You can't use conditions(WHERE clause) in TRUNCATE
Syntax – Truncate table [Table]

Für weitere Informationen besuchen

http://www.zilckh.com / was-ist-der-Differenz-zwischen-truncate-and-löschen /

Ein weiterer Unterschied der beiden Operationen ist, dass, wenn die Tabelle eine Identitätsspalte enthält, wird der Zähler für diese Spalte zurückgesetzt 1 (oder dem Wert Samen für die Spalte definiert ist) unter TRUNCATE. DELETE nicht über diese beeinflussen.

Kurz gesagt, gestutzt nichts log (so viel schneller ist, aber kann nicht rückgängig gemacht werden), während Lösch angemeldet ist (und kann Teil einer größeren Transaktion sein wird usw. Rollback). Wenn Sie Daten, die Sie in dev nicht in einer Tabelle wollen, ist es in der Regel besser abschneiden, da Sie nicht das Risiko des Auffüllens des Transaktionsprotokolls ausgeführt

Ein großer Grund ist es praktisch ist, ist, wenn Sie die Daten in einer Multi-Millionen-Reihe Tabelle müssen auffrischen, aber nicht wollen, es wieder aufzubauen. „Löschen *“ ewig dauern würde, während der Perfomance Auswirkungen von Truncate vernachlässigbar wäre.

Kann nicht tun DDL über einen dblink.

ich auf Matthieus Beitrag kommentieren würde, aber ich habe nicht die rep noch ...

In MySQL, der Auto-Increment-Zähler wird mit truncate zurückgesetzt, aber nicht mit löschen.

Es ist nicht so truncate nicht alles in SQL Server anmelden. truncate keine Informationen melden Sie sich aber die Aufhebung der Zuordnung von Datenseite für die Tabelle einzuloggen, auf dem Sie TRUNCATE gebrannt.

und verkürzten Datensatz kann ein Rollback, wenn wir Transaktion zu Beginn definieren, und wir können die abgeschnittenen Datensatz nach Rollback es wiederherzustellen. Aber kann nicht wiederhergestellt werden abgeschnittene Datensätze aus der Transaktionsprotokollsicherung nach begangen abgeschnitten Transaktion.

Kürzen kann auch hier das Beispiel Rollbacked werden

begin Tran
delete from  Employee

select * from Employee
Rollback
select * from Employee

Kürzen und Löschen in SQL sind zwei Befehle, die verwendet wird, um Daten aus der Tabelle zu entfernen oder zu löschen. Obwohl recht einfach in der Natur sowohl SQL-Befehle können viele Probleme schaffen, bis Sie mit Details vertraut sind, bevor es zu benutzen. Eine falsche Wahl der Befehl kann zur Folge haben entweder sehr langsam oder kann blies sogar Logsegment auf, wenn zu viele Daten entfernt werden muss und Logsegment ist nicht genug. Deshalb ist es wichtig, zu wissen, wann truncate verwenden und Befehl in SQL löschen, aber bevor diese verwenden, sollten Sie kennen die Unterschiede zwischen Kürzen und Löschen, und basierend auf sie, sollten wir in der Lage sein, um herauszufinden, wenn DELETE bessere Option ist für das Entfernen Daten oder TRUNCATE sollten spülen Tabellen verwendet werden.

Siehe überprüfen hier klicken

Durch eine TRUNCATE TABLE-Anweisung der Ausgabe, die Sie anweist, SQL Server jeden Datensatz in einer Tabelle zu löschen, ohne die Protokollierung oder Transaktionsverarbeitung stattfindet.

DELETE-Anweisung kann eine WHERE-Klausel müssen bestimmte Datensätze zu löschen, während TRUNCATE-Anweisung erfordert keine und wischt die gesamte Tabelle. Wichtig ist, dass die DELETE-Anweisung meldet sich das gelöschte Datum während der TRUNCATE-Anweisung nicht.

Ein weiterer Unterschied spezifisch für Microsoft SQL Server mit delete ist Sie output Anweisung verwenden können, um zu verfolgen, welche Datensätze gelöscht wurden, z.

delete from [SomeTable]
output deleted.Id, deleted.Name

Sie können dies nicht mit truncate.

Kürzen Befehl die Tabelle neu initialisieren verwendet wird, ist es ein DDL-Befehl, der alle Zeilen von table.Whereas löschen Löschen ein DML-Befehl, der verwendet wird Zeile oder Gruppe von Zeilen gemäß einer Bedingung zu löschen, wenn die Bedingung nicht festgelegt ist, dann wird dieser Befehl alle Zeilen aus der Tabelle löschen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top