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
语句将返回更新后的行,否则它将返回被更新的行数。