MySQL 零基础教程

MySQL UPDATE 语句

UPDATE 语句允许你修改现有数据表行中一个或多个列的值。与创建新数据的 INSERT 语句不同,UPDATE 的作用是转换和更新已经存储在数据库中的内容。

1. UPDATE 语句的结构

一个标准的 UPDATE 操作需要三个主要组件:目标表、列的新值,以及一个用于识别应该更改哪些行的过滤器。

UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
  • table_name (表名): 包含你想要修改的数据的表。
  • SET (设置): 该子句定义了要更新的列以及分配给它们的新值。你可以通过用逗号分隔来同时更新多个列。
  • WHERE (条件过滤): 将更新操作限制在特定行的过滤器。如果你省略了 WHERE 子句,表中的每一行都会被更新。 这是数据库管理中一条至关重要的安全规则。

2. 更新单条记录

考虑一个名为 employees(员工)的表,它追踪着员工的详细信息。假设一位 employee_id 为 101 的员工获得了晋升并更改了部门。

UPDATE employees
SET job_title = 'Senior Developer', -- 更新职位为高级开发者
    department_id = 5               -- 更新部门 ID 为 5
WHERE employee_id = 101;            -- 精准定位特定的员工

这条语句查找唯一的主键 employee_id = 101,并将更改仅应用于该特定记录。由于主键是唯一的,你可以完全保证这次操作只会影响恰好一行数据。

3. 更新多条记录

你可以通过提供一个匹配多条记录的条件,将更改应用于一组行。例如,如果你需要应用全公司范围的年度奖金,或者根据绩效层级调整薪水:

UPDATE employees
SET salary = salary * 1.10          -- 将现有薪水增加 10%
WHERE job_title = 'Junior Developer'; -- 针对所有初级开发者

在这个例子中,表达式 salary = salary * 1.10 演示了你可以使用列的当前值来计算它的新值。数据库会检索每一个 job_title 为 'Junior Developer' 的记录的现有薪水,将其乘以 1.10,然后将结果保存回同一行中。

4. 安全执行工作流

因为更新操作是永久性的,所以在运行更新命令之前验证你的选择标准是行业的最佳实践。请始终先运行一个带有相同 WHERE 子句的 SELECT 语句,以确保你定位到了正确的记录。

推荐的安全工作流:

  1. 定义目标条件: 明确你需要更新哪些数据。
  2. 运行 SELECT 查询以验证行: 先用 SELECT 看看会查出什么。
  3. 行是否符合预期?
    • : 回到第一步,重新调整你的 WHERE 条件。
    • : 继续下一步。
  4. 执行 UPDATE 语句: 应用真实的修改。
  5. 运行 SELECT 以确认更改: 再次查询,验证数据是否已正确更新。

5. 管理约束与数据完整性

更新操作同样受制于创建表时定义的约束(Constraints)。如果你尝试将某列更新为违反约束的值——例如,在一个定义为 UNSIGNED(无符号,即非负数)的列上设置负数,或者在一个 UNIQUE(唯一)列中引入重复值——MySQL 将拒绝该事务并返回一个错误。

此外,如果你启用了外键(Foreign Key)约束,并且如果你的更新会在子表中创建“孤儿”记录(Orphan record),那么你就无法更新父表中的值,除非你已经配置了 ON UPDATE CASCADE(级联更新)行为。