SQL UPDATE
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)