解码SQL UPDATE命令
学习如何使用sql update命令在数据库表中更新记录。
作为开发人员,您应该熟悉使用关系数据库。sql(或结构化查询语言)是一种适合初学者的语言,学习起来直观且语法简单。sql允许您创建数据库对象并查询关系数据库表。
您可以运行sql查询来创建、读取、更新和删除数据库表中的记录。您可能熟悉这些操作被统称为crud操作。
要更新存储在数据库表中的记录,您可以在sql中运行update命令。
在本教程中,您将学习:
- sql update命令的语法
- 如何根据特定条件或使用逻辑运算符链接的多个条件来更新记录
- 运行sql update命令时需注意的常见注意事项
sql update命令的语法
sql update命令的语法如下:
update table_name
set column = new_value
where condition;
上述查询将在满足条件为true的所有记录中更新column。
要更新多个列(或字段),请使用以下方式使用sql update命令:
update table_name
set column_1 = new_value_1, column_2 = new_value_2, ..., column_k = new_value_k
where condition;
请记住,关系数据库中:
- 表代表一个实体。
- 表的行是记录,表示实体的一个实例。
- 列也被称为字段或属性。在本教程中,我们将使用列和字段进行交换。
sql update命令的用法示例
现在让我们看一些示例。
先决条件
在开始编码之前:
- 本教程使用sqlite。因此,您需要安装sqlite和sqlite database browser(推荐)进行编码。请注意,您也可以使用mysql或postgresql。
- 如果您想复制示例,还需要python和faker python包。
创建带有记录的数据库表
如果您想跟随本教程进行编码,可以运行以下代码片段以创建并连接到一个名为customer_db.db的客户数据库。请注意,我们使用faker python库生成合成数据以插入到customers表中:
📑为了使此代码正常运行,确保您的开发环境中安装了python 3.7(或更高版本)和faker。您可以使用pip安装faker python包:
pip install faker
如果您已经有一个可以连接的数据库和一个可以查询的数据库表,您也可以使用它。
运行我们的第一个sql查询
customers
表具有以下字段:
customerid:customerid是一个主键,用于唯一标识数据库表中的记录。
name:客户的姓名
city:他们所属的城市。
email:他们的电子邮件地址。
num_orders:他们下的订单数量。
discount:折扣百分比,具有默认值2的整数。因为discount字段有一个默认值,所以在填充数据库表时我们不需要插入值。
您可以使用sqlite命令行客户端运行查询并查看结果。或者您也可以使用sqlite数据库浏览器。
我将展示来自sqlite db浏览器的输出,因为它们易于解释。
运行以下查询以获取customers表中的所有记录:
select * from customers;
实际操作中,除非有必要,否则应避免使用select *。但对于这个例子,我们将使用它,因为我们只有15条记录和不多的字段。
基于单个条件更新记录
现在我们知道了我们的表是什么样子,让我们运行一些update查询,根据所需的条件更新记录。
📋注意:在运行update语句之后,我们将运行select * from customers来查看更新后的记录。
更新单个字段
首先,让我们更新customerid=7的记录的city字段:
update customers
set city='codeshire'
where customerid=7;
让我们从customers表中选择所有列和记录:
select * from customers;
我们发现danielle ford(customerid=7)的city
字段已经更新。
更新多个字段
在前面的例子中,我们只更新了一个字段,即对应于customerid
7的记录的city
。但是我们也可以使用我们学到的语法更新多个字段。
在这里,我们同时更新对应于customerid
1的city
和email
字段:
update customers
set city='east carlisle',email='[email protected]'
where customerid=1;
接下来,我们运行:
select * from customers;
这是输出:
更新多个记录
因为我们使用的是唯一标识客户记录的主键customerid
,到目前为止运行的查询只更新了一个记录。
然而,如果条件在表中对多个记录成立,则运行sql更新命令将更新所有对应的记录。
以这个查询为例:
update customers
set discount=10
where num_orders > 170;
现在运行这个查询:
select * from customers;
这是输出:
运行上述sql更新命令修改了三条记录。它们都有num_orders
大于170,现在的discount
值为10。
根据多个条件更新记录
到目前为止,where
子句只有一个简单的条件,但是在过滤条件中使用逻辑运算符将多个条件链接在一起是很常见的。
为了理解这一点,让我们根据两个条件将折扣设置为5:
city like 'new%
‘:这个条件检查并包括那些城市字段以new开头的记录。num_orders > 100
:根据订单数量进行筛选,只包括订单数量大于100的记录。
update语句如下:
update customers
set discount=5
where city like 'new%' and num_orders>100;
注意,现在where
子句中有两个条件,它们通过逻辑and运算符链接在一起。只有那些同时满足两个条件的记录才会被更新。
接下来运行这个查询并观察输出:
select * from customers;
如输出所示,满足上述两个条件的记录的discount
字段被更新:
使用sql update命令时的常见注意事项
到目前为止执行的所有update语句中都包含了where子句。
例如,如果你想将某个客户的折扣更新为25,并且在更新查询中忘记包含带有customerid
的where
子句进行筛选:
update customers
set discount=25;
现在运行:
select * from customers;
你会看到表中的所有记录都被更新了。这可能不是你想要的行为。
⚠ 所以当您想根据条件更新记录的子集时,请记得包含where
子句。如果您想为所有记录更新特定字段,可以省略where
子句。
在此示例中,假设您即将举行黑色星期五促销活动,并希望为所有客户提供25%的折扣。然后运行上述查询将是有意义的。
结论
以下是您学到的内容的摘要:
- 当您想要更新数据库表中的记录时,可以使用sql update命令。
- sql
update
语句通常包括具有确定需要更新的记录子集(表的行)的条件的where
子句。 - 在
update
语句中省略where
子句会更新所有记录。因此,如果不希望更新表的所有行为所需行为,请务必小心不要省略where
子句。
接下来,查看这个快速参考的sql备忘录。