Làm thế nào tôi có thể kiểm tra câu lệnh UPDATE để xem nó có hoạt động không, ví dụ nếu nó thực sự cập nhật hàng vv?Cách kiểm tra chạy câu lệnh UPDATE trong PostgreSQL?
Có cách nào để mô phỏng dễ dàng không?
Làm thế nào tôi có thể kiểm tra câu lệnh UPDATE để xem nó có hoạt động không, ví dụ nếu nó thực sự cập nhật hàng vv?Cách kiểm tra chạy câu lệnh UPDATE trong PostgreSQL?
Có cách nào để mô phỏng dễ dàng không?
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.
Quấn nó trong một transaction, kiểm tra kết quả bằng SELECT và rollback ở cuối.
BEGIN;
UPDATE ...;
SELECT ...;
ROLLBACK;
Bạn có thể sử dụng RETURNING trong truy vấn UPDATE để bỏ qua truy vấn SELECT. –
Nếu bạn quyết định giữ nguyên các thay đổi, hãy sử dụng 'COMMIT' thay vì' ROLLBACK'. –
@FrankHeikens Bạn nên mở rộng nó thành một câu trả lời, rất hữu ích! – mkataja
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
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. –
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
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;
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.
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ách nào để mô phỏng dễ dàng không? – user1154863