2012-02-08 65 views

Trả lời

35

Sử dụng một transaction quấn báo cáo cập nhật của bạn và một truy vấn chọn (để kiểm tra các bản cập nhật) và sau đó luôn quay lại.

Ví dụ:

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! 

Một giao dịch thường kết thúc bằng một cam kết nhưng kể từ khi bạn chỉ là thử nghiệm và không muốn thay đổi là vĩnh viễn, bạn sẽ chỉ quay trở lại.

28

Quấn nó trong một transaction, kiểm tra kết quả bằng SELECT và rollback ở cuối.

BEGIN; 

UPDATE ...; 

SELECT ...; 

ROLLBACK; 
+4

Bạn có thể sử dụng RETURNING trong truy vấn UPDATE để bỏ qua truy vấn SELECT. –

+0

Nếu bạn quyết định giữ nguyên các thay đổi, hãy sử dụng 'COMMIT' thay vì' ROLLBACK'. –

+0

@FrankHeikens Bạn nên mở rộng nó thành một câu trả lời, rất hữu ích! – mkataja

0

Chạy kiểm tra cùng với một câu lệnh SELECT đầu tiên: các hàng trả về bởi CHỌN sẽ là hàng sửa đổi bởi CẬP NHẬT

+1

Không đủ. Có thể có FK, ràng buộc KIỂM TRA, ... mà một lệnh SELECT đơn giản sẽ không trúng. Một SELECT sẽ chỉ kiểm tra mệnh đề WHERE nhưng UPDATE có thể thất bại mặc dù SELECT thành công. –

2

Bạn luôn có thể xây dựng cơ sở dữ liệu mẫu trên SQL Fiddle và thử các câu lệnh cập nhật của mình tại đó.

tiết lộ đầy đủ: Tôi là tác giả của sqlfiddle.com

0

Với bản cập nhật đơn giản này:

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

tôi sẽ kiểm tra nó bằng một cái gì đó như thế này:

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

Thực ra, tôi 'd cố tình tham gia vào bộ não và phân tích nhiều hơn như thế này:

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

Bạn có thể sử dụng công cụ cho phép bạn chụp nhanh DB và cuộn lại dễ dàng. Tôi khuyên bạn nên OffScale - về cơ bản nó là git cho cơ sở dữ liệu.

+0

Trang chủ cho biết điều này chỉ hoạt động với MySQL - hoặc ít nhất không có tài liệu nào về cách cấu hình nó với một DBMS khác –

Các vấn đề liên quan