一、基本语法
MySQL的Update语法用于更新表中的数据。语法格式如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE some_column = some_value
其中,table_name
为需要更新数据的表名,column1
、column2
等为需要更新的列名,value1
、value2
等为需要更新的值。WHERE
子句用于指定更新的条件。
例如,现在有一个名为employees
的表格,其中包含id
、name
和age
三个列:
+----+-----------+-----+
| id | name | age |
+----+-----------+-----+
| 1 | John Doe | 25 |
| 2 | Jane Doe | 30 |
| 3 | Sam Smith | 35 |
| 4 | Alice Wu | 28 |
+----+-----------+-----+
要将id
为2的员工名字改为Jane Smith
,则可以这样执行更新语句:
UPDATE employees
SET name = 'Jane Smith'
WHERE id = 2;
执行完该语句后,再查看employees
表格,则会得到以下结果:
+----+-------------+-----+
| id | name | age |
+----+-------------+-----+
| 1 | John Doe | 25 |
| 2 | Jane Smith | 30 |
| 3 | Sam Smith | 35 |
| 4 | Alice Wu | 28 |
+----+-------------+-----+
二、更新多列
Update语法允许同时更新多个列,只需在SET
子句中用逗号隔开即可:
UPDATE employees
SET name = 'Alice Brown', age = 31
WHERE id = 4;
执行完该语句后,再查看employees
表格,则会得到以下结果:
+----+-------------+-----+
| id | name | age |
+----+-------------+-----+
| 1 | John Doe | 25 |
| 2 | Jane Smith | 30 |
| 3 | Sam Smith | 35 |
| 4 | Alice Brown | 31 |
+----+-------------+-----+
三、更新所有行
要更新表中的所有行,可以省略WHERE
子句:
UPDATE employees
SET age = 40;
执行完该语句后,再查看employees
表格,则会发现age
列的值都被更新成了40。
四、更新不存在的值
如果要更新表中不存在的值,Update语法会插入一条新的记录。例如,现在要将id
为5的员工信息更新为Jacob Smith
和32
岁:
UPDATE employees
SET name = 'Jacob Smith', age = 32
WHERE id = 5;
执行完该语句后,再查看employees
表格,则会得到以下结果:
+----+--------------+-----+
| id | name | age |
+----+--------------+-----+
| 1 | John Doe | 25 |
| 2 | Jane Smith | 30 |
| 3 | Sam Smith | 35 |
| 4 | Alice Brown | 31 |
| 5 | Jacob Smith | 32 |
+----+--------------+-----+
五、限制更新的行数
有时候我们可能只需要更新表中的前几条记录,可以使用LIMIT
关键字。例如,现在要将前两条员工记录的名字改为Anonymous
:
UPDATE employees
SET name = 'Anonymous'
LIMIT 2;
执行完该语句后,再查看employees
表格,则会得到以下结果:
+----+-------------+-----+
| id | name | age |
+----+-------------+-----+
| 1 | Anonymous | 25 |
| 2 | Anonymous | 30 |
| 3 | Sam Smith | 35 |
| 4 | Alice Brown| 31 |
| 5 | Jacob Smith| 32 |
+----+-------------+-----+
六、使用子查询更新数据
有时候需要根据另一个表中的内容来更新当前表中的某些行,这时可以使用子查询来实现。例如,现在有一个名为salary
的表格,其中包含id
和salary
两个列:
+----+--------+
| id | salary |
+----+--------+
| 1 | 3000 |
| 2 | 4000 |
| 3 | 5000 |
| 4 | 3500 |
+----+--------+
现在要将employees
表格中id
为1的员工的薪水修改为salary
表格中的薪水,可以这样写:
UPDATE employees
SET salary = (
SELECT salary
FROM salary
WHERE id = 1
)
WHERE id = 1;
执行完该语句后,再查看employees
表格,则会得到以下结果:
+----+-------------+-----+--------+
| id | name | age | salary |
+----+-------------+-----+--------+
| 1 | Anonymous | 25 | 3000 |
| 2 | Anonymous | 30 | NULL |
| 3 | Sam Smith | 35 | NULL |
| 4 | Alice Brown| 31 | NULL |
| 5 | Jacob Smith| 32 | NULL |
+----+-------------+-----+--------+
需要注意的是,子查询返回的结果必须是单行单列的,否则会报错。
七、使用多表更新
除了使用子查询外,还可以使用多表更新来更新数据。以employees
表格和salary
表格为例,现在要将employees
表格中的薪水改为salary
表格中对应的薪水:
UPDATE employees, salary
SET employees.salary = salary.salary
WHERE employees.id = salary.id;
执行完该语句后,再查看employees
表格,则会得到以下结果:
+----+-------------+-----+--------+
| id | name | age | salary |
+----+-------------+-----+--------+
| 1 | Anonymous | 25 | 3000 |
| 2 | Anonymous | 30 | 4000 |
| 3 | Sam Smith | 35 | 5000 |
| 4 | Alice Brown | 31 | 3500 |
| 5 | Jacob Smith | 32 | NULL |
+----+-------------+-----+--------+
需要注意的是,多表更新时需要将要更新的表格名按照table_name.column_name
的格式来指定。