您的位置:

MySQL Update语法详解

一、基本语法

MySQL的Update语法用于更新表中的数据。语法格式如下:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE some_column = some_value

其中,table_name为需要更新数据的表名,column1column2等为需要更新的列名,value1value2等为需要更新的值。WHERE子句用于指定更新的条件。

例如,现在有一个名为employees的表格,其中包含idnameage三个列:

+----+-----------+-----+
| 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 Smith32岁:

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的表格,其中包含idsalary两个列:

+----+--------+
| 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的格式来指定。