2012-02-08 13 views

risposta

35

Utilizzare un transaction per avvolgere la dichiarazione di aggiornamento e una query di selezione (per testare l'aggiornamento) e poi arrotolarlo sempre indietro.

Esempio:

BEGIN; 

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

SELECT accounts WHERE WHERE name = 'Alice'; 

ROLLBACK; -- << Important! Un-does your UPDATE statement above! 

Una transazione si conclude di solito con un commit, ma dal momento che si sta solo testando e non volete che le modifiche siano permanenti sarà solo rollback.

28

Avvolgere in un transaction, testare i risultati con un SELECT e rollback alla fine.

BEGIN; 

UPDATE ...; 

SELECT ...; 

ROLLBACK; 
+4

È possibile utilizzare il RESTIMENTO nella query UPDATE per saltare la query SELECT. –

+0

Se si decide di mantenere le modifiche, usare 'COMMIT' invece di' ROLLBACK'. –

+0

@FrankHeikens Dovresti espanderlo in una risposta, molto utile! – mkataja

0

Eseguire lo stesso controllo con un'istruzione SELECT prima: le righe restituite da SELECT saranno le righe modificate dal UPDATE

+1

Non sufficiente. Ci potrebbero essere FK, vincoli CHECK, ... che un semplice SELECT non colpirebbe. Un SELECT testerebbe solo la clausola WHERE ma l'UPDATE potrebbe fallire anche se SELECT ha esito positivo. –

2

È sempre possibile creare un database di esempio su SQL Fiddle e provare qui le dichiarazioni di aggiornamento.

Full disclosure: io sono l'autore di sqlfiddle.com

0

Dato questo semplice aggiornamento:

UPDATE Products 
    SET price_including_vat = price * 1.05 
WHERE product_type = 'Food'; 

vorrei testarlo utilizzando qualcosa di simile a questo:

SELECT price_including_vat AS price_including_vat__before, 
     price * 1.05 AS price_including_vat__after, 
     * 
    FROM Products 
WHERE product_type = 'Food'; 

In realtà, io 'impegnarsi proabilmente cervello e fare analisi più come questo:

WITH updated AS 
    (
    SELECT price_including_vat AS price_including_vat__before, 
      price * 1.05 AS price_including_vat__after, 
      * 
     FROM Products 
    WHERE product_type = 'Food' 
    ) 
SELECT * 
    FROM updated 
WHERE price_including_vat__before = price_including_vat__after; 
3

È possibile utilizzare uno strumento che consente di acquisire facilmente un'istantanea del DB e di eseguire il rollback. Raccomando OffScale - è fondamentalmente git per i database.

+0

La home page dice che funziona solo con MySQL - o almeno non c'è alcuna documentazione su come configurarlo con un DBMS diverso –

Problemi correlati