前面讲解了如何插入数据,数据插入之后,如果想变更,这就需要更新数据表中的数据。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元。