一、基本语法
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的格式来指定。
原创文章,作者:ESPBN,如若转载,请注明出处:https://www.506064.com/n/351611.html
微信扫一扫
支付宝扫一扫