Gibt es eine Möglichkeit, eine SQL-Aktualisierungsabfrage rückgängig zu machen?SQL update undo
Antwort
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.
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.
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.
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 ..
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!).
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:
- 1. Undo
- 2. undo sp_recompile
- 3. Undo/Reset AllowSetForegroundWindow() ruft
- 4. Undo/Redo in WPF?
- 5. Undo-Implementierung - DOM-Manipulationen
- 6. Undo SVN löschen ./* --force
- 7. Undo Tabelle Partitioning
- 8. undo/redo event binding
- 9. undo bzr rückgängig
- 10. Orakel-Undo Tablespaces
- 11. Undo git checkout --orphan
- 12. Wie funktioniert Undo?
- 13. Docker undo rm container
- 14. Git undo Last commit
- 15. Undo-Funktion für Textbox
- 16. Python Undo Unicode Frage
- 17. Undo schnell git vorwärts
- 18. Python undo Methode Mock
- 19. EmberJS Geschichte/Undo
- 20. SQL - sequenzielle Update Problem - update die Aktualisierungsdatum
- 21. SQL Update-Abfrage
- 22. SQL Update - mehrere Spalten
- 23. Tricky SQL Update
- 24. Automatisiertes Update SQL Server
- 25. SQL Update - Alles in()
- 26. SQL UPDATE Abfrage
- 27. SQL UPDATE Befehl
- 28. SQL update \ loop Abfrage
- 29. machen SQL Update-Abfrage
- 30. Basic SQL-Update-Trigger
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. –