BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
SELECT balance FROM accounts WHERE name = 'Alice';
ROLLBACK; -- << Important! Un-does your UPDATE statement above!
-- example data
CREATE TABLE data(id int, text text);
INSERT INTO DATA VALUES(1,'aaa'),(2,'bbb'),(3,'ccc'),(4,'ddd');
-- original data
SELECT * from data;
-- dry-run update
BEGIN;
UPDATE
data
SET
text = 'modified'
WHERE
id > 2
RETURNING
id, text;
ROLLBACK;
-- data after dry-run update
SELECT * from data;
UPDATE Products
SET price_including_vat = price * 1.05
WHERE product_type = 'Food';
我会用这样的东西来测试它:
SELECT price_including_vat AS price_including_vat__before,
price * 1.05 AS price_including_vat__after,
*
FROM Products
WHERE product_type = 'Food';
实际上,我可能会用大脑来做这样的分析:
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;
7条答案
按热度按时间xjreopfe1#
使用transaction Package 您的update语句和select查询(以测试更新),然后总是回滚它。
示例:
事务通常以提交结束,但由于您只是在测试,不希望更改是永久性的,因此只需回滚即可。
55ooxyrt2#
将其 Package 在transaction中,使用SELECT测试结果,并在最后回滚。
e0bqpujr3#
在你的SQL
UPDATE
命令前面加上EXPLAIN
[ ref ],它会告诉你有多少行会受到你的命令的影响,而且它不会执行实际的更新。这比在事务中 Package 命令简单得多。例如:
ctzwtxfj4#
您总是可以在SQLFiddle上构建一个示例数据库,并在那里尝试您的update语句。
充分披露:我是www.example.com的作者sqlfiddle.com
kuhbmx9i5#
在Postgres中,您可以使用UPDATE子句 RETURNING 来显示哪些行已经被修改。
vojdkbi06#
首先使用SELECT语句运行相同的检查:SELECT返回的行将是UPDATE修改的行
oo7oh9g97#
给出以下简单更新:
我会用这样的东西来测试它:
实际上,我可能会用大脑来做这样的分析: