了解如何使用 SQL UPDATE 命令更新数据库表中的记录。
开发人员必须熟悉使用关系数据库。 SQL(结构化查询语言)是一种适合初学者的语言,学习起来很直观,语法也很简单。 SQL 允许您创建数据库对象和查询关系数据库表。
您可以运行 SQL 查询来创建、读取、更新和删除数据库表中的记录。你可能知道这些操作统称为CRUD操作。
要更新存储在数据库表中的记录,请在 SQL 中运行UPDATE命令。
在本教程中您将学习:
-
UPDATE命令语法 - 如何使用逻辑运算符根据特定或链接条件更新记录
- 运行 SQL
UPDATE命令时要记住的一般注意事项
SQL UPDATE 命令语法
SQL UPDATE 命令的语法为:
UPDATE table_name
SET column = new_value
WHERE condition;上述查询将更新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 数据库浏览器(推荐)来进行编码。请注意,您还可以使用 MySQL 或 PostgreSQL。
- 如果您想复制此示例,您还需要 Python 和Faker Python 包。
创建包含记录的数据库表
如果您想随本教程一起编写代码,您可以运行以下代码片段来创建并连接到客户数据库customer_db.db 。请注意,我们正在使用 Faker Python 库生成合成数据以插入customers表中。
# main.py
import sqlite3
from faker import Faker
import random
# connect to the db
conn = sqlite3.connect('customer_db.db')
cur = conn.cur()
# create a database table
cur.execute('''CREATE TABLE customers (
customerID INTEGER PRIMARY KEY,
name TEXT,
city TEXT,
email TEXT,
num_orders INTEGER,
discount INTEGER DEFAULT 2)''')
# create a Faker object
fake = Faker()
Faker.seed(42)
for _ in range(15):
name = fake.name()
city = fake.city()
d = fake.domain_name()
email = f"{name[:2]}.{city[:2]}@{d}"
num_orders = random.choice(range(200))
db_cursor.execute('INSERT INTO customers (name, city, email, num_orders) \
VALUES (?,?,?,?)', (name,city,email,num_orders))
# commit the transaction
conn.commit()
cur.close()
conn.close()📑 为了使此代码正常运行,请确保您的开发环境中安装了 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='Al.Ea@isle.com'
WHERE customerID=1;然后运行:
SELECT * FROM customers;输出是:

更新多条记录
到目前为止,我们运行的查询仅更新了一条记录,因为我们使用了customerID ,它是唯一标识客户记录的主键。
但是,如果表中的多条记录的条件成立,则运行 SQL update 命令会更新所有对应的记录。
例如,考虑以下查询:
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。并且您忘记在更新查询中包含WHERE子句以及要过滤的customerID 。
UPDATE customers
SET DISCOUNT=25;现在就做:
SELECT * FROM customers;可以看到表中的所有记录都已更新。这可能不是您想要的行为。

⚠ 因此,如果要根据条件更新记录子集,请务必包含WHERE子句。如果要更新所有记录中的特定字段,可以省略 WHERE 子句。
在此示例中,假设黑色星期五促销即将到来,您希望向所有客户提供 25% 的折扣。那么运行上面的查询就有意义了。
结论
以下是我所学到的内容的总结:
- 如果要更新数据库表中的记录,可以使用 SQL UPDATE 命令。
- SQL
UPDATE语句通常包含一个WHERE子句,该子句包含确定要更新的记录子集(表中的行)的条件。 - 在
UPDATE语句中省略WHERE子句将更新所有记录。因此,如果更新表的所有行不是所需的行为,则应小心不要省略WHERE子句。
然后查看此 SQL 备忘单以供快速参考。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

