MySQL-更新表

时间:2020-02-23 14:41:04  来源:igfitidea点击:

在本教程中,我们将学习在MySQL中更新表的数据。

我们使用" UPDATE table_name"命令来更新表中的数据。

更新语法

UPDATE table_name
SET column_name = value
WHERE condition;

使用主键更新单行的列

在以下示例中,我们将更新员工编号" e05"的员工得分。

在更新之前:

mysql> SELECT * FROM employee WHERE employeeid = 'e05';
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email                | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| e05        | Bob       | Coder    | [email protected] |     5 | 1900-08-20 | 2016-01-01 01:02:10 | 2016-01-01 01:02:10 |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
1 row in set (0.00 sec)

更新查询:

mysql> UPDATE employee
SET score = 8
WHERE employeeid = 'e05';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

UPDATE之后的员工数据:

mysql> SELECT * FROM employee WHERE employeeid = 'e05';
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email                | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| e05        | Bob       | Coder    | [email protected] |     8 | 1900-08-20 | 2016-01-01 01:02:10 | 2016-01-01 01:02:10 |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
1 row in set (0.00 sec)

使用主键更新一行的多列

要更新多个列,我们使用逗号分隔它们。

在以下示例中,我们将更新员工编号" e05"的得分和最后修改的列。

mysql> UPDATE employee
SET score = 7,
lastmodified = '2016-01-02 03:04:05'
WHERE employeeid = 'e05';

更新后,我们得到以下结果。

mysql> SELECT * FROM employee WHERE employeeid = 'e05';
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email                | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| e05        | Bob       | Coder    | [email protected] |     7 | 1900-08-20 | 2016-01-02 03:04:05 | 2016-01-01 01:02:10 |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
1 row in set (0.00 sec)

给定匹配项更新多行的列

在下面的示例中,我们将更新所有姓氏为" Doe"的员工的得分和最后修改的数据。

mysql> UPDATE employee
SET score = 9,
lastmodified = '2016-01-02 03:04:05'
WHERE lastname = 'Doe';

我们得到以下

Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

更新的行:

mysql> SELECT * FROM employee WHERE lastname = 'Doe';
+------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email               | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+
| e02        | John      | Doe      | [email protected] |     9 | 1900-02-03 | 2016-01-02 03:04:05 | 2016-01-01 01:01:04 |
| e03        | Jane      | Doe      | [email protected] |     9 | 1900-05-20 | 2016-01-02 03:04:05 | 2016-01-01 01:01:04 |
+------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+
2 rows in set (0.00 sec)

没有任何WHERE子句的更新

如果在更新时不提供WHERE子句,它将更新表的所有行。

如果没有WHERE条件,请勿运行UPDATE查询。
您将最终更新您不需要的内容。

在更新之前:

mysql> SELECT * FROM employee;
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email                | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| e01        |      |   | @example.com    |     6 | 1900-01-01 | 2016-01-01 01:01:01 | 2016-01-01 01:01:01 |
| e02        | John      | Doe      | [email protected]  |     9 | 1900-02-03 | 2016-01-02 03:04:05 | 2016-01-01 01:01:04 |
| e03        | Jane      | Doe      | [email protected]  |     9 | 1900-05-20 | 2016-01-02 03:04:05 | 2016-01-01 01:01:04 |
| e04        | Tin       | Tin      | [email protected]   |     7 | 1900-10-20 | 2016-01-01 01:02:03 | 2016-01-01 01:02:03 |
| e05        | Bob       | Coder    | [email protected] |     7 | 1900-08-20 | 2016-01-02 03:04:05 | 2016-01-01 01:02:10 |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
5 rows in set (0.00 sec)

更新查询:

mysql> UPDATE employee
SET score = 7,
lastmodified = '2016-02-04 06:08:10';
Query OK, 5 rows affected (0.01 sec)
Rows matched: 5  Changed: 5  Warnings: 0

更新后:

mysql> SELECT * FROM employee;
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| employeeid | firstname | lastname | email                | score | birthday   | lastmodified        | created             |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
| e01        |      |   | @example.com    |     7 | 1900-01-01 | 2016-02-04 06:08:10 | 2016-01-01 01:01:01 |
| e02        | John      | Doe      | [email protected]  |     7 | 1900-02-03 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 |
| e03        | Jane      | Doe      | [email protected]  |     7 | 1900-05-20 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 |
| e04        | Tin       | Tin      | [email protected]   |     7 | 1900-10-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:03 |
| e05        | Bob       | Coder    | [email protected] |     7 | 1900-08-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:10 |
+------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+
5 rows in set (0.00 sec)