zhcn 技术 教育科技 解码 SQL UPDATE 命令

解码 SQL UPDATE 命令

了解如何使用 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表有以下字段:

  • customerIDcustomerID是一个主键,有助于唯一标识数据库表中的记录。
  • name :客户姓名
  • city ​​:您所属的城市。
  • email :电子邮件地址。
  • num_orders :已下订单数。
  • discount :折扣率。一个整数,默认值为 2。 discount字段有一个默认值,因此在向数据库表中输入数据时不需要插入该值。

📝 您可以使用 SQLite 命令行客户端运行查询并查看结果。或者,您可以使用 SQLite 数据库浏览器。

显示 SQLite DB 浏览器的输出以便于解释。

运行以下查询以检索customers表中的所有记录。

 SELECT * FROM customers; 
图像78
图像78

实际上,除非必要,否则应避免使用SELECT * 。然而,在这个例子中我们只有 15 条记录,字段不多,所以我们将使用它。

根据单个条件更新记录

现在我们知道表是什么样子,让我们运行一些UPDATE查询来根据我们想要的条件更新记录。

📋注意:运行 UPDATE 语句后,运行SELECT * FROM customers查看更新的记录。

单字段更新

首先,我们用customerID=7更新记录的city字段。

 UPDATE customers
SET city='Codeshire'
WHERE customerID=7;

让我们从 Customers 表中选择所有列和记录。

 SELECT * FROM customers; 
SQL更新1
SQL更新1

您可以看到 Danielle Ford ( customerID=7 ) 的city字段已更新。

更新多个字段

在上一个示例中,我们仅更新了与customerID 7 对应的记录中的一个字段city 。但是,您也可以使用您学到的语法更新多个字段。

在这里,我们更新了与customerID 1 对应的cityemail字段。

 UPDATE customers
SET city='East Carlisle',email='Al.Ea@isle.com'
WHERE customerID=1;

然后运行:

 SELECT * FROM customers;

输出是:

SQL更新2
SQL更新2

更新多条记录

到目前为止,我们运行的查询仅更新了一条记录,因为我们使用了customerID ,它是唯一标识客户记录的主键。

但是,如果表中的多条记录的条件成立,则运行 SQL update 命令会更新所有对应的记录。

例如,考虑以下查询:

 UPDATE customers 
SET discount=10
WHERE num_orders > 170;

然后运行以下查询:

 SELECT * FROM customers;

输出是:

SQL更新3
SQL更新3

当您运行上述 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更新4
SQL更新4

使用 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 备忘单以供快速参考。

了解如何使用 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表有以下字段:

  • customerIDcustomerID是一个主键,有助于唯一标识数据库表中的记录。
  • name :客户姓名
  • city ​​:您所属的城市。
  • email :电子邮件地址。
  • num_orders :已下订单数。
  • discount :折扣率。一个整数,默认值为 2。 discount字段有一个默认值,因此在向数据库表中输入数据时不需要插入该值。

📝 您可以使用 SQLite 命令行客户端运行查询并查看结果。或者,您可以使用 SQLite 数据库浏览器。

显示 SQLite DB 浏览器的输出以便于解释。

运行以下查询以检索customers表中的所有记录。

 SELECT * FROM customers; 
图像78
图像78

实际上,除非必要,否则应避免使用SELECT * 。然而,在这个例子中我们只有 15 条记录,字段不多,所以我们将使用它。

根据单个条件更新记录

现在我们知道表是什么样子,让我们运行一些UPDATE查询来根据我们想要的条件更新记录。

📋注意:运行 UPDATE 语句后,运行SELECT * FROM customers查看更新的记录。

单字段更新

首先,我们用customerID=7更新记录的city字段。

 UPDATE customers
SET city='Codeshire'
WHERE customerID=7;

让我们从 Customers 表中选择所有列和记录。

 SELECT * FROM customers; 
SQL更新1
SQL更新1

您可以看到 Danielle Ford ( customerID=7 ) 的city字段已更新。

更新多个字段

在上一个示例中,我们仅更新了与customerID 7 对应的记录中的一个字段city 。但是,您也可以使用您学到的语法更新多个字段。

在这里,我们更新了与customerID 1 对应的cityemail字段。

 UPDATE customers
SET city='East Carlisle',email='Al.Ea@isle.com'
WHERE customerID=1;

然后运行:

 SELECT * FROM customers;

输出是:

SQL更新2
SQL更新2

更新多条记录

到目前为止,我们运行的查询仅更新了一条记录,因为我们使用了customerID ,它是唯一标识客户记录的主键。

但是,如果表中的多条记录的条件成立,则运行 SQL update 命令会更新所有对应的记录。

例如,考虑以下查询:

 UPDATE customers 
SET discount=10
WHERE num_orders > 170;

然后运行以下查询:

 SELECT * FROM customers;

输出是:

SQL更新3
SQL更新3

当您运行上述 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更新4
SQL更新4

使用 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 备忘单以供快速参考。