PostgreSQL - UPDATE
PostgreSQL - UPDATE 语句
Section titled “PostgreSQL - UPDATE 语句”UPDATE 语句用于修改表中的现有记录。它几乎总是与 WHERE 子句一起使用,以指定要更新的行。如果没有 WHERE 子句,UPDATE 语句将修改表中的所有行,这可能是一个具有破坏性且意想不到的操作。
UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;table_name:你要更新的表。SET column = value:要修改的列及其新值。WHERE condition:标识要更新的特定行的条件。这是语句的关键部分。
示例:更新单条记录
Section titled “示例:更新单条记录”我们来使用一个 products 表。首先,我们创建它并添加一些数据。
CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, price NUMERIC(10, 2) NOT NULL, stock_quantity INT);
INSERT INTO products (name, price, stock_quantity) VALUES('Laptop', 1200.00, 50),('Keyboard', 75.50, 120),('Mouse', 25.00, 200),('Monitor', 300.00, 80);现在,假设我们需要更正 ‘Mouse’ 的价格。我们可以使用其 id 或 name 进行更新。
UPDATE productsSET price = 26.50WHERE name = 'Mouse';执行此查询后,‘Mouse’ 行的价格将被更新。您可以通过 SELECT * FROM products WHERE name = 'Mouse'; 进行验证。
更新多条记录
Section titled “更新多条记录”你可以更新符合条件的多个行。例如,让我们对所有价格超过 100 美元的产品应用 10% 的折扣。
UPDATE productsSET price = price * 0.90WHERE price > 100.00;这将更新 ‘Laptop’ 和 ‘Monitor’ 行。
现代特性:RETURNING 子句
Section titled “现代特性:RETURNING 子句”PostgreSQL 的一个强大特性是 RETURNING 子句,它允许你获取刚刚更新的行的值。这在应用程序开发中非常有用,因为它避免了后续的 SELECT 查询。
让我们更新 ‘Keyboard’ 的库存,并立即查看更新后的行。
UPDATE productsSET stock_quantity = stock_quantity - 5WHERE name = 'Keyboard'RETURNING id, name, stock_quantity;此查询不仅会更新数据库,还会返回以下结果:
| id | 名称 | 库存数量 |
|---|---|---|
| 2 | Keyboard | 115 |
安全与最佳实践
Section titled “安全与最佳实践”- 始终使用
WHERE子句: 忘记WHERE子句是一个常见且危险的错误。它将更新表中的每一行。 - 使用事务: 执行关键更新时,将
UPDATE语句包装在事务中(BEGIN; ... COMMIT;)。这允许你在永久更改之前检查更改,或者在出现问题时ROLLBACK。 - 使用
SELECT进行测试: 在运行UPDATE之前,你可以编写一个具有相同WHERE子句的SELECT语句,以预览将受影响的行。例如:SELECT * FROM products WHERE price > 100.00;。 - 使用主键: 在更新单个特定行时,最安全的方法是在
WHERE子句中使用主键(例如,WHERE id = 3),因为它保证你只针对一条记录。