Как я могу проверить оператор UPDATE, например, чтобы увидеть, будет ли он работать, например, если он действительно обновит строки и т.д.?
Есть ли способ легко имитировать его?
Как я могу проверить оператор UPDATE, например, чтобы увидеть, будет ли он работать, например, если он действительно обновит строки и т.д.?
Есть ли способ легко имитировать его?
Используйте транзакцию, чтобы обернуть оператор обновления и запрос выбора (для проверки обновления), а затем всегда откатывать его.
Пример:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
SELECT accounts WHERE name = 'Alice';
ROLLBACK; -- << Important! Un-does your UPDATE statement above!
Транзакция обычно заканчивается фиксацией, но поскольку вы просто тестируете и не хотите, чтобы изменения были постоянными, вы просто откатитесь.
Оберните его в transaction, проверьте результаты с помощью SELECT и отката в конце.
BEGIN;
UPDATE ...;
SELECT ...;
ROLLBACK;
Вы всегда можете создать примерную базу данных SQL Fiddle и попробовать свои инструкции по обновлению там.
Полное раскрытие: я являюсь автором sqlfiddle.com
Вы можете использовать инструмент, который позволяет легко сделать снимок базы данных и отката. Я рекомендую OffScale - это в основном git для баз данных.
Запустите ту же проверку с помощью инструкции SELECT: строки, возвращаемые SELECT, будут строками, измененными UPDATE
Учитывая это простое обновление:
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;
С Postgres вы можете использовать предложение UPDATE RETURNING, чтобы показать, какие строки были модифицированы.
-- 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;