将满足WHERE条件的所有行的一个或多个列值改为新的值。没有WHERE子句则修改所有的行
一、Syntax:
Single-table syntax:更新一个表中的值
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...-------查找修改数据的列
[WHERE where_condition]---过滤条件,过滤出数据的行
[ORDER BY ...]----排序操作,更改跟新表数据的排序
[LIMIT row_count]---显示修改的行数
1、set子句:(1)字面量 (2)(表达式) (3)(函数) (4)(子查询)
update t1 set id=(select sum(id) from t1) where name=‘b’;
注意事项:set语句子查询不可以是要修改的表本身,不可以使用组函数-----------看例5
2、order by
修改主键列时,如果是自增一,那么就有有报错,因为1+1=2,但是已经有2的值了,所以可以先降序排列,在增加1
很少使用,除非涉及到修改主键、修改特定顺序的行
Multiple-table syntax:更新多个表中的值
UPDATE [LOW_PRIORITY] [IGNORE] table_references---------------任何合法的语法,但是不能使用order by和limit语句
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
3、更改多个表中的数据
原理:1.先根据关联条件形成多表关联,找出多个表相关联的列
2.根据过滤条件筛选出要修改的行
3.同时修改多个表的数据(上两步可以认为形成了一张表的数据)
二、单表例题:
例1: 把95号球员的联盟会员号码改为2000
1.mysql> select LEAGUENO from PLAYERS where PLAYERNO=95;
+----------+
| LEAGUENO |
+----------+
| NULL |
+----------+
1 row in set (0.00 sec)
2.mysql> update PLAYERS set LEAGUENO=2000 where PLAYERNO=95;
例2: 把所有的罚款增加5%(不需要where条件,因为是修改所有的行)