数据库刷新语句_更新查询的sql语句

数据库刷新语句_更新查询的sql语句学习重点 使用 UPDATE 语句可以更改(更新)表中的数据。 更新部分数据行时可以使用 WHERE 来指定更新对象的条件。通过 WHERE 子句指定更新对象的 UPDATE 语句称为搜索型 UPDA

SQL 数据的更新(UPDATE 语句的使用方法)

目录
  • 一、UPDATE 语句的基本语法
  • 二、指定条件的 UPDATE 语句(搜索型 UPDATE)
  • 三、使用 NULL 进行更新
  • 四、多列更新
  • 请参阅

学习重点

  • 使用 UPDATE 语句可以更改(更新)表中的数据。

  • 更新部分数据行时可以使用 WHERE 来指定更新对象的条件。通过 WHERE 子句指定更新对象的 UPDATE 语句称为搜索型 UPDATE 语句。

  • UPDATE 语句可以将列的值更新为 NULL

  • 同时更新多列时,可以在 UPDATE 语句的 SET 子句中,使用逗号分隔更新对象的多个列。

一、UPDATE 语句的基本语法

使用 INSERT 语句向表中插入数据之后,有时却想要再更改数据,例如“将商品销售单价登记错了”等的时候。这时并不需要把数据删除之后再重新插入,使用 UPDATE 语句就可以改变表中的数据了。

KEYWORD

  • UPDATE 语句

INSERT 语句、DELETE 语句一样,UPDATE 语句也属于 DML 语句。通过执行该语句,可以改变表中的数据。其基本语法如下所示。

语法 4 改变表中数据的 UPDATE 语句

UPDATE <表名>
   SET <列名> = <表达式>;

将更新对象的列和更新后的值都记述在 SET 子句中。我们还是以 Product(商品)表为例,由于之前我们删除了“销售单价大于等于 4000 日元”的 2 行数据,现在该表中只剩下了 6 行数据了(表 2)。

KEYWORD

  • SET 子句

表 2 Product

product_id
(商品编号)
product_name
(商品名称)
product_type
(商品种类)
sale_price
(销售单价)
purchase_price
(进货单价)
regist_date
(登记日期)
0001 T 恤衫 衣服 1000 500 2009-09-20
0002 打孔器 办公用品 500 320 2009-09-11
0004 菜刀 厨房用具 3000 2800 2009-09-20
0006 叉子 厨房用具 500 2009-09-20
0007 擦菜板 厨房用具 880 790 2008-04-28
0008 圆珠笔 办公用品 100 2009-11-11

接下来,让我们尝试把 regist_date 列(登记日期)的所有数据统一更新为“2009-10-10”。具体的 SQL 语句请参见代码清单 15。

代码清单 15 将登记日期全部更新为“2009-10-10”

UPDATE Product
   SET regist_date = "2009-10-10";

表中的数据有何变化呢?我们通过 SELECT 语句来确认一下吧。

-- 确认更新内容
SELECT * FROM Product ORDER BY product_id;

执行结果

将登记日期全部更新为“2009-10-10”

此时,连登记日期原本为 NULL 的数据行(运动 T 恤)的值也更新为 2009-10-10 了。

将登记日期全部更新为“2009-10-10”

二、指定条件的 UPDATE 语句(搜索型 UPDATE

接下来,让我们看一看指定更新对象的情况。更新数据时也可以像 DELETE 语句那样使用 WHERE 子句,这种指定更新对象的 UPDATE 语句称为搜索型 UPDATE 语句。该语句的语法如下所示(与 DELETE 语句十分相似)。

KEYWORD

  • 搜索型 UPDATE

语法 5 更新部分数据行的搜索型 UPDATE

UPDATE <表名>
   SET <列名> = <表达式>
 WHERE <条件>;

例如,将商品种类(product_type)为厨房用具的记录的销售单价(sale_price)更新为原来的 10 倍,请参见代码清单 16。

代码清单 16 将商品种类为厨房用具的记录的销售单价更新为原来的 10 倍

UPDATE Product
   SET sale_price = sale_price * 10
 WHERE product_type = "厨房用具";

我们可以使用如下 SELECT 语句来确认更新后的内容。

-- 确认更新内容
SELECT * FROM Product ORDER BY product_id;

执行结果

执行结果

该语句通过 WHERE 子句中的“product_type = "厨房用具"”条件,将更新对象限定为 3 行。然后通过 SET 子句中的表达式 sale_price * 10,将原来的单价扩大了 10 倍。SET 子句中赋值表达式的右边不仅可以是单纯的值,还可以是包含列的表达式。

三、使用 NULL 进行更新

使用 UPDATE 也可以将列更新为 NULL(该更新俗称为 NULL 清空)。此时只需要将赋值表达式右边的值直接写为 NULL 即可。例如,我们可以将商品编号(product_id)为 0008 的数据(圆珠笔)的登记日期(regist_date)更新为 NULL(代码清单 17)。

KEYWORD

NULL 清空

代码清单 17 将商品编号为 0008 的数据(圆珠笔)的登记日期更新为 NULL

UPDATE Product
   SET regist_date = NULL
 WHERE product_id = "0008";
-- 确认更新内容
SELECT * FROM Product ORDER BY product_id;

执行结果

执行结果

INSERT 语句一样,UPDATE 语句也可以将 NULL 作为一个值来使用。

但是,只有未设置 NOT NULL 约束和主键约束的列才可以清空为 NULL。如果将设置了上述约束的列更新为 NULL,就会出错,这点与 INSERT 语句相同。

法则 6

使用 UPDATE 语句可以将值清空为 NULL(但只限于未设置 NOT NULL 约束的列)。

四、多列更新

UPDATE 语句的 SET 子句支持同时将多个列作为更新对象。例如我们刚刚将销售单价(sale_price)更新为原来的 10 倍,如果想同时将进货单价(purchase_price)更新为原来的一半,该怎么做呢?最容易想到的解决办法可能就是像代码清单 18 那样,执行两条 UPDATE 语句。

代码清单 18 能够正确执行的繁琐的 UPDATE 语句

-- 一条UPDATE语句只更新一列
UPDATE Product
   SET sale_price = sale_price * 10
 WHERE product_type = "厨房用具";

UPDATE Product
   SET purchase_price = purchase_price / 2
 WHERE product_type = "厨房用具";

虽然这样也能够正确地更新数据,但执行两次 UPDATE 语句不但有些浪费,而且增加了 SQL 语句的书写量。其实,我们可以将其合并为一条 UPDATE 语句来处理。合并的方法有两种,请参见代码清单 19 和代码清单 20。

方法①:代码清单 19 将代码清单 18 的处理合并为一条 UPDATE 语句

-- 使用逗号对列进行分隔排列
UPDATE Product
   SET sale_price = sale_price * 10,
       purchase_price = purchase_price / 2
 WHERE product_type = "厨房用具";

方法②:代码清单 20 将代码清单 18 的处理合并为一条 UPDATE 语句

-- 将列用()括起来的清单形式
UPDATE Product
   SET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)
 WHERE product_type = "厨房用具";

执行上述两种 UPDATE 语句,都可以得到相同的结果:只有厨房用具的销售单价(sale_price)和进货单价(purchase_price)被更新了。

-- 确认更新内容
SELECT * FROM Product ORDER BY product_id;

执行结果

执行结果

当然,SET 子句中的列不仅可以是两列,还可以是三列或者更多。

需要注意的是第一种方法——使用逗号将列进行分隔排列(代码清单 19),这一方法在所有的 DBMS 中都可以使用。但是第二种方法——将列清单化(代码清单 20),这一方法在某些 DBMS 中是无法使用的 [1]。因此,实际应用中通常都会使用第一种方法。

请参阅

  • 数据的插入
  • 数据的删除
  • 数据的更新
  • 事务

(完)


  1. 可以在 PostgreSQL 和 DB2 中使用。 ↩︎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5702.html

(0)
上一篇 2023-04-28
下一篇 2023-04-28

相关推荐

  • Python模块封装:提高代码可重用性和可维护性

    Python模块封装:提高代码可重用性和可维护性在Python开发中,模块是一个非常重要的概念。通过模块,我们可以将代码分割成一些可以重复利用的部分,使代码更加可维护、可重用和可扩展。本文将从多个方面为大家介绍Python模块封装的相关技术和实现方法。

    2024-03-29
    83
  • 云原生 | 混沌工程工具 ChaosBlade Operator 入门篇「建议收藏」

    云原生 | 混沌工程工具 ChaosBlade Operator 入门篇「建议收藏」作者:丁源 RadonDB 测试负责人 负责 RadonDB 云数据库、容器化数据库的质量性能测试,迭代验证。对包括云数据库以及容器化数据库性能和高可用方案有深入研究。 近日,国内多家网站同时发生短期

    2023-04-19
    153
  • Python断言语句:优化代码测试与错误排除

    Python断言语句:优化代码测试与错误排除在Python编程中,断言语句(assert)是一种用来检测程序中是否存在错误的工具。它可以帮助开发者发现潜在的错误,并且在出现问题时及早报错,从而提高程序的可靠性和稳定性。

    2024-02-28
    99
  • mysql数据库基础知识_数据库的基础是什么

    mysql数据库基础知识_数据库的基础是什么数据库的de增删改查【CRUD】 DDL【操作数据库、表】 创建数据库 CREATE DATABASE db1;【db1是我要创建的数据库的名称,如果已经存在数据库db1,则会报错】 CREATE D

    2023-04-16
    139
  • Postwomen API测试工具

    Postwomen API测试工具在Web开发中,API测试是非常重要的环节。要保证所开发的API能够正确地接收和响应请求,就需要对它们进行测试。Postwomen API测试工具就是在这样的背景下被开发出来的。它是一款免费的开源工具,可以用来快速、高效地测试RESTful API。

    2024-05-02
    74
  • 容器化|自建 MySQL 集群迁移到 Kubernetes[亲测有效]

    容器化|自建 MySQL 集群迁移到 Kubernetes[亲测有效]背景 如果你有自建的 MySQL 集群,并且已经感受到了云原生的春风拂面,想将数据迁移到 Kubernetes 上,那么这篇文章可以给你一些思路。 文中将自建 MySQL 集群数据,在线迁移到 Kub

    2023-06-05
    144
  • Python 查询变量类型的方法

    Python 查询变量类型的方法Python是一种动态类型语言,这就意味着在声明变量时不需要显式地指定其类型。Python会在运行时自动确定变量的类型。然而,当我们需要在程序中处理不同类型的数据时,我们需要知道变量的类型。在这篇文章中,我将介绍几种查询Python变量类型的常用方法。

    2024-05-22
    62
  • mapping测试_分布式测试优点

    mapping测试_分布式测试优点作者:叶奔, 殷成文 不久前我们开源了基于 Kubernetes 的混沌测试工具 Chaos Mesh®,Chaos Mesh 提供了模拟系统异常状况的能力,但这只是混沌工程中的一环,完整混沌工程核…

    2023-03-17
    129

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注