前面讲解了如何插入数据,数据插入之后,如果想变更,这就需要更新数据表中的数据。MySQL中使用UPDATE语句可以更新表中的数据,语法格式如下所示。

UPDATE 表名

SET 字段名1=值1 [,字段名2=值2,……]

[WHERE条件表达式];

以上语法格式中,“字段名”用于指定需要更新的字段名称,“值”用于表示字段更新的新数据,如果要更新多个字段的值,可以用逗号分隔多个字段和值,“WHERE条件表达式”是可选的,用于指定更新数据需要满足的条件。UPDATE语句可以更新表中的部分数据和全部数据,接下来对这两种情况详细讲解。

1.更新全部数据

当UPDATE语句中不使用WHERE条件语句时,会将表中所有数据的指定字段全部更新。

接下来通过具体案例演示更新全部数据,如例3-6所示。

【例3-6将teacher表中的所有表示年龄的age字段更新为30,SQL语句如下所示。

mysql> UPDATE teacher SET age=30;
Query OK, 6 rows affected (0.04 sec)
Rows matched: 6  Changed: 6  Warnings: 0
以上执行结果可看到执行完成后提示了“Changed:6”,说明成功更新了6条数据。为了进一步验证,使用SELECT语句查看teacher表中的数据,SQL语句如下所示。
mysql> SELECT * FROM teacher;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | AA   |   30 |
|    2 | BB   |   30 |
|    3 | CC   |   30 |
|    4 | DD   |   30 |
|    5 | EE   |   30 |
|    6 | FF   |   30 |
+------+------+------+
6 rows in set (0.00 sec)

从以上执行结果可看到,teacher表中所有的age字段都更新为了30,证明更新成功。

2.更新部分数据

前面讲解了更新全部数据的方法,这种需求一般在实际开发中比较少,而大多数需求是更新表中的部分数据,使用WHERE子句可以指定更新数据的条件。

接下来通过具体案例演示更新部分数据,如例3-7所示。

将emp表中姓名为lilei的员工工资修改为5000,SQL语句如下所示。

mysql> UPDATE emp SET salary=5000 WHERE name='lilei';

Query OK, 1 row affected (0.03 sec)

Rows matched: 1  Changed: 1  Warnings: 0

以上执行结果可看到执行完成后提示了“Changed:1”,说明成功更新了一条数据。为了进一步验证,使用SELECT语句查看emp表中的数据,SQL语句如下所示。

mysql> SELECT * FROM emp;
+------+-------+--------+------------+---------+------------+-------------+
| id   | name  | gender | birthday   | salary  | entry_date | resume_text |
+------+-------+--------+------------+---------+------------+-------------+
|    1 | lilei | male   | 1991-05-10 | 5000.00 | 2013-06-10 | none        |
|    2 | lucy  | female | 1988-03-15 | 6000.00 | 2014-10-20 | none        |
|    3 | king  | female | 1993-06-15 | 7000.00 | 2014-07-10 | none        |
|    0 | 2013  | 5000   | 1992-01-01 |    0.00 | 0000-00-00 | 4           |
|    5 | mary  | female | 1995-07-10 |    NULL | NULL       | NULL        |
|    6 | rin   | male   | 1996-01-01 |    NULL | NULL       | NULL        |
+------+-------+--------+------------+---------+------------+-------------+
6 rows in set (0.00 sec)

从以上执行结果可看到emp表中姓名为lilei的员工工资成功修改为5000。

接下来将emp表中id为2的员工工资修改为8000,resume_text修改为“excellent”,SQL语句如下所示。

mysql> UPDATE emp
    -> SET salary=8000,resume_text='excellent'
    -> WHERE id=2;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0
以上执行结果可看到执行完成后提示了“Changed:1”,说明成功更新了一条数据。为了进一步验证,使用SELECT语句查看emp表中的数据,SQL语句如下所示。
mysql> SELECT * FROM emp;
+------+-------+--------+------------+---------+------------+-------------+
| id   | name  | gender | birthday   | salary  | entry_date | resume_text |
+------+-------+--------+------------+---------+------------+-------------+
|    1 | lilei | male   | 1991-05-10 | 5000.00 | 2013-06-10 | none        |
|    2 | lucy  | female | 1988-03-15 | 8000.00 | 2014-10-20 | excellent   |
|    3 | king  | female | 1993-06-15 | 7000.00 | 2014-07-10 | none        |
|    0 | 2013  | 5000   | 1992-01-01 |    0.00 | 0000-00-00 | 4           |
|    5 | mary  | female | 1995-07-10 |    NULL | NULL       | NULL        |
|    6 | rin   | male   | 1996-01-01 |    NULL | NULL       | NULL        |
+------+-------+--------+------------+---------+------------+-------------+
6 rows in set (0.00 sec)
从以上执行结果可看到,emp表中id为2的员工工资成功修改为8000,resume_text成功修改为excellent。
接下来将emp表中所有女性的的工资在原有基础上增加1000元,SQL语句如下所示。
mysql> UPDATE emp
    -> SET salary=salary+1000
    -> WHERE gender='female';
Query OK, 2 rows affected (0.07 sec)
Rows matched: 2  Changed: 2  Warnings: 0
以上执行结果可看到执行完成后提示了“Changed:2”,说明成功更新了两条数据。为了进一步验证,使用SELECT语句查看emp表中的数据,SQL语句如下所示。
mysql> SELECT * FROM emp;
+------+-------+--------+------------+---------+------------+-------------+
| id   | name  | gender | birthday   | salary  | entry_date | resume_text |
+------+-------+--------+------------+---------+------------+-------------+
|    1 | lilei | male   | 1991-05-10 | 5000.00 | 2013-06-10 | none        |
|    2 | lucy  | female | 1988-03-15 | 9000.00 | 2014-10-20 | excellent   |
|    3 | king  | female | 1993-06-15 | 8000.00 | 2014-07-10 | none        |
|    0 | 2013  | 5000   | 1992-01-01 |    0.00 | 0000-00-00 | 4           |
|    5 | mary  | male   | 1995-07-10 |    NULL | NULL       | NULL        |
|    6 | rin   | male   | 1996-01-01 |    NULL | NULL       | NULL        |
+------+-------+--------+------------+---------+------------+-------------+
6 rows in set (0.00 sec)

从以上执行结果可看到,emp表中所有gender字段值为female的员工工资增加了1000元。