2010-02-01 15 views
15

C'è un modo per annullare una query di aggiornamento SQL?Aggiornamento SQL Annulla

+0

Tu non dici quello database in uso.Se si utilizza Oracle, è possibile provare una query di flashback per recuperare i dati incasinati. –

risposta

16

Non è possibile a meno che non lo si è eseguito all'interno di un transaction.

A seconda delle transazioni DBMS verranno gestite in modo diverso, quindi leggere la documentazione. Per esempio con mysql ecco come va:

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

Con Postresql:

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

Con 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 

Ci sono anche alcune azioni che non possono essere messi in una transazione , ma nella maggior parte dei sistemi di gestione di database che puoi trovare in questi giorni dovresti essere in grado di eseguire il rollback di un update.

Infine puoi sempre annullare un aggiornamento se tieni un registro preciso di tutto ciò che accade nel database, ma questa è un'altra storia.

5

Se si esegue l'aggiornamento all'interno di una transazione, è possibile eseguire il rollback della transazione.

SQL Server:

begin transaction 

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

rollback transaction 

Un'altra tecnica potrebbe essere quella di aggiungere un trigger di aggiornamento al tavolo, e in qualsiasi momento il record viene aggiornato, salvare i valori precedenti al largo in una tabella "storia". Questa potrebbe essere una buona idea se questa tabella è molto utilizzata.

2

Undo è chiamato rollback in SQL. Dopo aver eseguito uno commit, non è possibile annullarlo senza dover ripristinare i backup.

Si noti che facendo un rollback si annulla un'intera transazione, il che significa che ogni aggiornamento, inserimento ed eliminazione dall'inizio della transazione, che di solito è dall'ultimo commit o rollback. Ciò significa che se si eseguono due aggiornamenti consecutivi, non è possibile annullare solo il secondo. Alcuni database forniscono "punti di salvataggio" che lo consentono.

1

Solo se ci si trova in una transazione (come marcgg) ha detto o se si dispone di un backup recente ... recuperando in questo modo fa stratch il termine "Annulla" rathermuch ..

0

È possibile utilizzare uno strumento di terze parti come il Red Gate's Log Rescue. È disponibile una versione di prova gratuita di 14 giorni del loro kit di strumenti SQL. (Supponendo SQL Server 2000!).

6

SQL Server non supporta questa funzionalità, ma in alcuni casi è possibile ripristinare i dati leggendo il log delle transazioni. Funziona se il database era in modalità di ripristino completo e sono necessari strumenti di terze parti come ApexSQL Log o Log Rescue. C'è anche un modo per leggere t-log usando il comando DBCC LOG ma probabilmente si rivelerà troppo difficile.

È anche possibile controllare i seguenti argomenti in cui questo è discusso:

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

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