1. 介绍
如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。
以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
你可以同时更新一个或多个字段。
你可以在 WHERE 子句中指定任何条件。
你可以在一个单独表中同时更新数据。
更新表中的记录时要小心!
要注意SQL UPDATE 语句中的 WHERE 子句!
WHERE子句指定哪些记录需要更新。如果省略WHERE子句,所有记录都将更新!
2. 条件操作符
以下我们将在 SQL UPDATE 命令使用 WHERE 子句来更新 leco 表中张三的age的数据:
2.1 修改之前数据
mysql> select * from leco where name="张三";
+------+--------+--------+------+
| id | name | sex | age |
+------+--------+--------+------+
| 1 | 张三 | female | 18 |
+------+--------+--------+------+
1 row in set (0.00 sec)
2.2 修改数据
mysql> update leco set age=20 where name="张三";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
2.3 修改之后数据
mysql> select * from leco where name="张三";
+------+--------+--------+------+
| id | name | sex | age |
+------+--------+--------+------+
| 1 | 张三 | female | 20 |
+------+--------+--------+------+
1 row in set (0.00 sec)
2.4 脏数据
脏数据(Dirty Read)是指源系统中的数据不在给定的范围内或对于实际业务毫无意义,或是数据格式非法,以及在源系统中存在不规范的编码和含糊的业务逻辑。
2.4.1 概念
在数据库技术中,脏数据在临时更新(脏读)中产生。事务A更新了某个数据项X,但是由于某种原因,事务A出现了问题,于是要把A回滚。但是在回滚之前,另一个事务B读取了数据项X的值(A更新后),A回滚了事务,数据项恢复了原值。事务B读取的就是数据项X的就是一个“临时”的值,就是脏数据。
2.4.2 产生
通俗的讲,当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
2.4.3 处理方法
找到合适的点回滚。
2.4.4 操作
# 1. 修改之前
mysql> select * from leco;
+------+--------+--------+------+
| id | name | sex | age |
+------+--------+--------+------+
| 1 | 张三 | female | 20 |
| 2 | 李四 | male | 20 |
| 3 | 王五 | male | 30 |
| 4 | 赵六 | female | 40 |
+------+--------+--------+------+
4 rows in set (0.00 sec)
# 2. 修改
mysql> update leco set age=20;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 4 Changed: 2 Warnings: 0
影响了4条数据,
# 3. 此时再查看数据,数据全部被修改了,可见update的时候要结和where等修改
mysql> select * from leco;
+------+--------+--------+------+
| id | name | sex | age |
+------+--------+--------+------+
| 1 | 张三 | female | 20 |
| 2 | 李四 | male | 20 |
| 3 | 王五 | male | 20 |
| 4 | 赵六 | female | 20 |
+------+--------+--------+------+
4 rows in set (0.00 sec)