2012-02-08 22 views

Odpowiedz

35

Użyj transaction owinąć swoje oświadczenie aktualizacji i kwerendę wybierającą (przetestować aktualizację), a następnie zawsze go wycofywać.

Przykład:

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! 

Transakcja zazwyczaj kończy się popełnić, ale ponieważ jesteś po prostu testuje i nie chcesz, aby zmiany stały się będzie po prostu wycofać.

28

Zawiń go w transaction, przetestuj wyniki za pomocą SELECT i wycofaj na końcu.

BEGIN; 

UPDATE ...; 

SELECT ...; 

ROLLBACK; 
+4

Możesz użyć RETURNING w kwerendie UPDATE, aby pominąć zapytanie SELECT. –

+0

Jeśli zdecydujesz się zachować zmiany, użyj 'COMMIT' zamiast' ROLLBACK'. –

+0

@FrankHeikens Powinieneś rozwinąć to w odpowiedź, bardzo przydatna! – mkataja

0

Uruchom samo sprawdzanie pierwszy SELECT: wiersze zwracane przez SELECT będzie wiersze zmodyfikowane przez UPDATE

+1

Niewystarczające. Mogą istnieć ograniczenia FK, CHECK, ... że prosty SELECT nie zostanie trafiony. SELECT przetestuje tylko klauzulę WHERE, ale UPDATE może się nie powieść, nawet jeśli SELECT się powiedzie. –

2

Zawsze można utworzyć przykładową bazę danych pod numerem SQL Fiddle i wypróbować tam swoje instrukcje aktualizacji.

Pełne ujawnienie: Jestem autorem sqlfiddle.com

0

Biorąc pod uwagę to prosta zmiana:

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

bym go przetestować za pomocą czegoś takiego:

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

Właściwie, "w stanie bardziej angażować mózg i wykonywać analizy bardziej w ten sposób:

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

Możesz użyć narzędzia, które pozwala łatwo zrobić migawkę bazy danych i przywrócić ją. Polecam OffScale - to w zasadzie git dla baz danych.

+0

Strona główna mówi, że działa tylko z MySQL - a przynajmniej nie ma żadnej dokumentacji na temat konfiguracji z innym DBMS –

Powiązane problemy