如何在SQL中修改表记录中的数据:SQL更新查询
更新 SQL 记录,如何编写 SQL 命令以更改表中的行?
我解释了如何用简单的词、没有水分的方式编辑 SQL 数据库中的数据元组。UPDATE SET 命令很简单!适用于 MySQL、PostgresQL、MS SQL、SQLite、Oracle、MariaDB 和其他 SQL 数据库管理系统。
SQL 中的 UPDATE 命令用于修改表中的现有数据
它允许更新一行或多行,以及选定记录中的一个或多个字段。SQL 更新 SET 查询的语法如下:
UPDATE
tableName
SET
field1 = value1,
field2 = value2
WHERE
condition;
这字面意思是“更新表,设置新值给字段,在符合条件的记录中”。
如果未指定条件,则将更新表中的所有行!
因此,在大多数情况下,使用条件(WHERE)来限制更新的数据非常重要。
请注意,最后一个更新的字段与 WHERE 运算符之间不应有逗号,否则会出现错误!
例如,在我们的数据库中,有一个名为 products 的产品表,我们想要更改具有特定 id 的产品的价格。
为什么是 id?这是表中每一行的唯一编号。
在一个表中 不能有多个相同的 id,这使我们能够 保证 通过知道记录的 id,我们可以确切地更改该记录。
如何使用 SQL 命令按 ID 更新记录的示例:
要更新 ID 为 5 的产品的价格(price),SQL 查询将如下所示:
UPDATE products SET price = 200 WHERE id = 5;
在这种情况下,ID 为 5 的产品价格将更新为 200。
请注意,如果我们跳过 WHERE 条件,则表中所有产品的价格都会更新。
如何在 SQL 中更改记录中的多个字段?
使用 UPDATE 命令,我们可以更新多个字段。例如,如果我们想更新 ID 为 5 的产品的名称和价格,SQL 查询将如下:
UPDATE products SET name = 'Новый продукт', price = 200 WHERE id = 5;
如何根据条件在 SQL 中更新多个记录:
有时需要根据特定标准同时更新多行。例如,如果我们想将“电子产品”类别的所有产品(假设它的 id = 5)的价格提高 10%,我们可以使用以下查询:
UPDATE products SET price = price * 1.10 WHERE category_id = 5;
在这种情况下,类别 ID 为 5 的所有产品的价格都会增加。通过使用这样的条件,我们可以有效地大规模编辑数据库中的数据。
使用 SQL 中的子查询更新数据:
带有子查询的 SQL UPDATE 命令示例。当我们需要根据从另一张表提取的数据更新记录时,使用子查询可能会很有用。
例如,如果我们的折扣表 discounts 并且我们想根据当前折扣更新产品价格,那么查询可以如下所示:
UPDATE
products
SET
price = price - (
SELECT
discount
FROM
discounts
WHERE
products.id = discounts.product_id
);
该查询更新每个产品的价格,使其减少相应折扣表中折扣的金额。
在 SQL 中使用事务更新数据
有时,更新需要大规模的数据筛选,为了确保数据库的完整性,将 UPDATE 命令包装在事务中是有意义的。这使得在出现错误时可以回滚更改。
事务允许将多个操作分组,使它们作为一个整体执行。如果事务中的某个操作失败,则可以回退整个事务,数据将保持在原始状态。
假设我们有一个表:账户,我们想将钱从一个账户转到另一个账户。这个过程涉及两个步骤:从发件人的账户中扣除金额并将相同的金额添加到收件人的账户中。
SQL 事务更新数据的示例:
BEGIN;
UPDATE
accounts
SET
balance = balance - 100
WHERE
account_id = 1;
UPDATE
accounts
SET
balance = balance + 100
WHERE
account_id = 2;
-- 检查更新是否成功
IF (SELECT balance FROM accounts WHERE account_id = 1) < 0 THEN
ROLLBACK; -- 如果账户中资金不足,则回滚事务
ELSE
COMMIT; -- 如果一切顺利,则提交更改
END IF;
这是一个非常简单的示例,演示了事务的使用如何帮助避免许多潜在错误并确保数据库数据的完整性。
我们通过 BEGIN 命令开始事务。然后我们执行两个更新:减少发件人账户的余额并增加收件人账户的余额。之后,我们检查发件人账户中是否有足够的资金。如果在扣除后余额变为负数,我们会使用 ROLLBACK 回滚事务。如果一切顺利,我们将使用 COMMIT 命令确认更改。