2010-02-01 11 views
15

Gibt es eine Möglichkeit, eine SQL-Aktualisierungsabfrage rückgängig zu machen?SQL update undo

+0

Sie nicht sagen, welche Datenbank Sie verwenden.Wenn Sie Oracle verwenden, können Sie eine Flashback-Abfrage versuchen, um Ihre verwirrten Daten zurück zu bekommen. –

Antwort

16

Sie können nicht, wenn Sie es innerhalb einer transaction ausgeführt haben.

Abhängig von Ihrem DBMS werden Transaktionen anders behandelt, lesen Sie die Dokumentation. Zum Beispiel mit mysql hier, wie es geht:

START TRANSACTION; 
SELECT @A:=SUM(salary) FROM table1 WHERE type=1; 
UPDATE table2 SET [email protected] WHERE type=1; 
COMMIT; 

Mit Postresql:

BEGIN; 
UPDATE accounts SET balance = balance - 100.00 
    WHERE name = 'Alice'; 
-- etc etc 
COMMIT; 

Mit TSQL:

DECLARE @TranName VARCHAR(20) 
SELECT @TranName = 'MyTransaction' 
BEGIN TRANSACTION @TranName 
GO 
USE pubs 
GO 
UPDATE roysched 
SET royalty = royalty * 1.10 
WHERE title_id LIKE 'Pc%' 
GO 
COMMIT TRANSACTION MyTransaction 
GO 

Es gibt auch einige Aktionen, die nicht in eine Transaktion gesetzt werden kann , aber in den meisten Datenbankverwaltungssystemen, die Sie heutzutage finden, sollten Sie in der Lage sein, einen Rollback update durchzuführen.

Schließlich können Sie immer ein Update rückgängig machen, wenn Sie ein genaues Protokoll über alles, was in der Datenbank passiert, behalten, aber das ist eine andere Geschichte.

5

Wenn Sie das Update innerhalb einer Transaktion ausführen, können Sie die Transaktion zurücksetzen.

SQL Server:

begin transaction 

update [Table] set col1 = 'test' where Id = 3 

rollback transaction 

Eine andere Technik könnte sein, ein Update-Trigger auf der Tabelle hinzuzufügen, und zu jeder Zeit der Datensatz aktualisiert wird, die vorherigen Werte aus in eine „Geschichte“ Tabelle zu speichern. Dies kann oder auch nicht eine gute Idee sein, wenn diese Tabelle stark verwendet wird.

2

Rückgängig heißt in SQL rollback. Sobald Sie ein commit getan haben, können Sie es nicht rückgängig machen, ohne in Sicherungen wiederherzustellen.

Beachten Sie, dass das Durchführen eines Rollbacks eine vollständige Transaktion rückgängig macht, was bedeutet, dass jedes Update, Einfügen und Löschen seit dem Beginn der Transaktion seit dem letzten Commit oder Rollback erfolgt. Dies bedeutet, dass Sie bei zwei aufeinanderfolgenden Aktualisierungen nicht nur die zweite rückgängig machen können. Einige Datenbanken bieten "Savepoints", die dies erlauben.

1

Nur wenn Sie in einer Transaktion (wie marcgg) sind gesagt oder, wenn Sie ein aktuelles Backup haben ... so erholt hat stratch den Begriff „undo“ rathermuch ..

0

Sie können ein Drittanbieter-Tool verwenden wie Red Gate Log Rescue. Es gibt eine 14-tägige kostenlose, funktionale Testversion ihres SQL-Toolkits. (Angenommen, SQL Server 2000!).

6

SQL Server unterstützt diese nicht standardmäßig, aber in einigen Fällen ist es möglich, Daten durch Lesen des Transaktionslogs wiederherzustellen. Dies funktioniert, wenn sich die Datenbank im vollständigen Wiederherstellungsmodus befindet und Tools von Drittanbietern wie ApexSQL Log oder Log Rescue benötigt werden. Es gibt auch eine Möglichkeit, t-log mit dem Befehl DBCC LOG zu lesen, aber es wird wahrscheinlich zu schwierig sein.

Sie können auch folgenden Themen an herausfinden, wo dies diskutiert wird:

How can I rollback an UPDATE query in SQL server 2005?

Read the log file (*.LDF) in SQL Server 2008