更新数据是指对表中存在的记录进行修改,这是数据库常见的操作,比如某个学生改了名字,就需要对其记录信息中的 name 字段值进行修改。
MySQL中使用 UPDATE语句来更新表中的记录,其基本的语法格式如下所示:
UPDATE 表名
SET 字段名 1=值 1[,字段名 2=值2,…」
[WHERE 条件表达式]
在上述语法格式中,“字段名 1”,“字段名 2”用于指定要更新的字段名称,“值 1”““值2”用于表示字段更新的新数据。“WHERE条件表达式”是可选的,用于指定更新数据需要满足的条件。UPDATE语句可以更新表中的部分数据和全部数据,下面就对这两种情况进行讲解。
1、UPDATE 更新部分数据
更新部分数据是指根据指定条件更新表中的某一条或者某几条记录,需要使用 WHERE 子句来指定更新记录的条件。
例如,更新 student 表中 id 字段值为 1 的记录,将记录中的 name 字段的值更改为'caocao',grade 字段的值更改为 50。在更新数据之前,首先使用查询语句查看 id 字段值为1的记录,执行结果如下所示:
mysql> select * from student
-> where id=1;
+------+----------+-------+
| id | name | grade |
+------+----------+-------+
| 1 | zhangsan | 98.5 |
+------+----------+-------+
1 row in set (0.00 sec)
从查询结果可以看到,id 字段值为1的记录只有一条,记录中 name 字段的值为 'zhangsan' ,grade 字段的值为 98.5。下面使用 UPDATE 语句更新这条记录,SQL 语句如下所示:
mysql> UPDATE student set
-> name='caocao',grade=50
-> where id=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
上述 SQL 语句执行成功后,会将 id 为 1 的数据进行更新。为了验证数据是否更新成功,使用 SELECT 语句查看数据库 student 中 id 为1的记录,查询结果如下所示:
mysql> select * from student
-> where id=1;
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 1 | caocao | 50 |
+------+--------+-------+
1 row in set (0.00 sec)
从查询结果可以看到,id 字段值为1的记录发生了更新,记录中 name字段的值变为 'caocao',grade 字段的值变为 50。如果表中有多条记录满足 WHERE 子句中的条件表达式,则满足条件的记录都会发生更新。
例如,更新 student 表中 id 字段值小于 4 的记录,将这些记录的 grade 字段值都更新为 100。在更新数据前,首先使用查询语句查看 id 字段值小 4 的记录,执行结果如下所示:
mysql> select * from student
-> where id<4;
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 1 | caocao | 50 |
| 2 | lisi | 95 |
| 3 | wangwu | 61.5 |
+------+--------+-------+
3 rows in set (0.00 sec)
从查看结果可以看到,id 字段值小于4的记录一共有三条,它们的 grade 字段值各不相同。下面使用 UPDATE 语句更新这三条记录,UPDATE 语句如下所示:
mysql> UPDATE student
-> SET grade=100
-> WHERE id<4;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
执行 UPDATE 语句更新 student 表中的数据,然后通过查询语句查看更新后的数据,执行结果如下所示:
mysql> select * from student
-> WHERE id<4;
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 1 | caocao | 100 |
| 2 | lisi | 100 |
| 3 | wangwu | 100 |
+------+--------+-------+
3 rows in set (0.00 sec)
从查询结果可以看出,id 字段值为1、2、3 的记录其 grade 字段值都变为 100,这说明满足 WHERE 子句中条件表达式的记录都更新成功。
2、PDATE 更新全部数据
在 UPDATE语句中如果没有使用 WHERE子句,则会将表中所有记录的指定字段都进行更新。
例如,更新 student 表中全部记录,将 grade 字段值都更新为 80,UPDATE语句如下所示:
mysql> UPDATE student
-> SET grade=80;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6 Changed: 6 Warnings: 0
执行 UPDATE 语句更新 student 表中的数据,接下来通过查询语句查看更新后的记录,SQL 语句如下所示:
mysql> select * from student;
+------+-----------+-------+
| id | name | grade |
+------+-----------+-------+
| 1 | caocao | 80 |
| 2 | lisi | 80 |
| 3 | wangwu | 80 |
| 4 | zhaoliu | 80 |
| NULL | sunbin | 80 |
| 5 | boya | 80 |
| 6 | lilei | 80 |
| 7 | hanmeimei | 80 |
| 8 | poly | 80 |
| 9 | liubei | 80 |
| 10 | guanyu | 80 |
| 11 | zhangfei | 80 |
+------+-----------+-------+
12 rows in set (0.00 sec)
从查询结果可以看出,student 表中所有记录的 grade 字段都变为 80,数据更新成功。