PostgreSQL UPDATE 用法与实例
在本文中,我们讨论了在 PostgreSQL 中使用 UPDATE 语句更新表中的行。
在 PostgreSQL 中,UPDATE 语句允许你更新表中的已有的数据行。
UPDATE 语法
PostgreSQL UPDATE 语句可以更新表中的一行或者多行数据,可以更新表中的一个或者多个列的值。 以下是 UPDATE 语句的基本语法:
UPDATE [IGNORE] table_name
SET
column_name1 = value1,
column_name2 = value2,
...
[WHERE clause]
[RETURNING expr];
用法说明:
-
UPDATE关键字后指定要更新数据的表名。 -
使用
SET子句设置列的新值。多个列使用逗号分隔。列的值可以是普通的字面值,也可以是表达式运算,还可以是子查询。 -
使用
WHERE子句指定要更新的行的条件。只有符合WHERE条件的行才会被更新。 -
WHERE子句是可选的。如果不指定WHERE子句,则更新表中的所有行。 -
RETURNING子句是可选的。它用于返回更新的行的信息。expr可以是列名或者表达式,多个列或者表达式请使用逗号分隔。 您还可以使用*表示表中的所有的列。如果不指定
RETURNING子句,UPDATE语句将返回更新的行数。
UPDATE 语句中的 WHERE 子句非常重要。除非您特意,否则不要省略 WHERE 子句。
PostgreSQL UPDATE 实例
下面我们将通过几个实例来展示 UPDATE 的具体用法。
我们将使用 Sakila 示例数据库 中的表进行演示,请您先在 PostgreSQL 中安装 Sakila 示例数据库。
在以下实例中,customer 表中存储了客户的信息。
使用 UPDATE 修改单列值
在这个例子中,我们将把 customer_id 等于 1 的客户的电子邮件修改为 [email protected]。
-
使用以下
SELECT语句查看更新前的数据。SELECT first_name, last_name, email FROM customer WHERE customer_id = 1;first_name | last_name | email ------------+-----------+------------------------------- MARY | SMITH | [email protected] -
使用以下
UPDATE语句更新email列的值。UPDATE customer SET email = '[email protected]' WHERE customer_id = 1;UPDATE 1在此
UPDATE语句中:- 通过
WHERE子句指定更新的条件为customer_id = 1。 - 通过
SET子句将email列的值设置为新电子邮件。
UPDATE返回了UPDATE 1,它表示更新了一行。 - 通过
-
或者,您可以使用以下
RETURNING子句直接查看更新后的数据:UPDATE customer SET email = '[email protected]' WHERE customer_id = 1 RETURNING first_name, last_name, email;first_name | last_name | email ------------+-----------+----------------------------------- MARY | SMITH | [email protected]
使用 UPDATE 修改多列值
在这个例子中,我们将同时更新 customer_id 等于 1 的客户的 first_name, last_name, email 列。
UPDATE customer
SET first_name = 'Tim',
last_name = 'Duncan',
email = '[email protected]'
WHERE customer_id = 1
RETURNING first_name, last_name, email;
first_name | last_name | email
------------+-----------+-------------------------------
Tim | Duncan | [email protected]使用表达式更新
使用 UPDATE 更新时,列的值可以设置为表达式的运算结果,比如函数或其他的运算。
下面的 UPDATE 更新所有客户的电子邮件的域名部分:
UPDATE customer
SET email = REPLACE(email, 'sakilacustomer.org', 'sjkjc.com')
RETURNING first_name, last_name, email;
first_name | last_name | email
-------------+--------------+---------------------------------
PATRICIA | JOHNSON | [email protected]
LINDA | WILLIAMS | [email protected]
BARBARA | JONES | [email protected]
ELIZABETH | BROWN | [email protected]
JENNIFER | DAVIS | [email protected]
MARIA | MILLER | [email protected]
SUSAN | WILSON | [email protected]
MARGARET | MOORE | [email protected]
DOROTHY | TAYLOR | [email protected]
LISA | ANDERSON | [email protected]
...
(599 rows)注意,本例中没有使用 WHERE 子句,所以表中所有的数据都进行了更新。
使用子查询更新
下面实例展示了如何为没有绑定商店的客户绑定一个随机商店。
UPDATE customer
SET store_id = (
SELECT store_id
FROM store
ORDER BY random()
LIMIT 1
)
WHERE store_id IS NULL;
在本例中,我们通过以下 SELECT 语句返回一个随机的商店 id:
SELECT store_id
FROM store
ORDER BY random()
LIMIT 1
在 SET 子句中,将 store_id 的值设置为上面的子查询的结果。
结论
PostgreSQL UPDATE 语句用来更新一个表中的一个或者多个已有的行。如果带有 RETURNING 子句, UPDATE 语句将返回更新后的行,否则它将返回被更新的行数。