首先,单个表的UPDATE语句:
更新[LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1 = expr1 [,col_name2 = expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
第二,多表UPDATE语句:
更新[LOW_PRIORITY] [IGNORE] table_references
SET col_name1 = expr1 [,col_name2 = expr2 ...]
[WHERE where_definition]
UPDATE语法可以使用新值更新原始表行中的列.
SET子句指示要修改的列以及要赋予的值. WHERE子句指定应更新的行.
如果没有WHERE子句,请更新所有行. 如果指定了ORDER BY子句,则按指定的顺序更新行.
LIMIT子句用于提供限制,以限制可以更新的行数.
UPDATE语句支持以下修饰符:
1. 如果使用LOW_PRIORITY关键字,则UPDATE的执行将延迟,直到没有其他客户端从表中读取为止.
2. 如果使用IGNORE关键字,即使在更新过程中发生错误,update语句也不会被中断.
如果出现重复的关键字冲突,则这些行将不会更新. 如果在更新列之后,新值将导致数据转换错误,则这些行将更新为最接近的合法值.
如果通过表达式中的tbl_name访问列,则UPDATE将使用列中的当前值.
例如,将“年龄”列设置为比当前值多一:
复制代码,代码如下:
mysql>更新人员数据SET age = age + 1;
UPDATE分配是从左到右评估的.
例如,将“年龄”列加倍,然后增加:
复制代码,代码如下:
mysql>更新人员数据SET age = age * 2,age = age + 1;
如果将列设置为当前包含的值,MySQL会注意到这一点,但不会更新.
如果将已定义为NOT NULL的列更新为NULL,则该列将设置为与该列类型相对应的默认值update语句,并累积警告数.
对于数字类型,默认值为0;对于数字类型,默认值为0. 对于字符串类型,默认值为空字符串('');对于日期和时间类型,默认值为“零”.
UPDATE将返回实际更改的行数. Mysql_info()C API函数可以返回匹配和更新的行数,以及在UPDATE过程中生成的警告数.
您可以使用LIMIT row_count来限制UPDATE的范围. LIMIT子句是与行匹配的限制.
只要找到满足WHERE子句的row_count行update语句,该语句就会中止,无论这些行是否已更改.
如果UPDATE语句包含ORDER BY子句,则按该子句指定的顺序更新行.
您还可以执行包含多个表的UPDATE操作. table_references子句列出了联合中包含的表.
示例:
复制代码,代码如下:
SQL>更新项目,每月SET个项目. price= month.price
WHERE items.id = month.id;
注意: 上面的代码显示了使用逗号运算符的内部联合,但是多表UPDATE语句可以使用SELECT语句中允许的任何类型的联合,例如LEFT JOIN.
注意: 您不能同时将ORDER BY或LIMIT与多表UPDATE一起使用.
在已更改的多表UPDATE中,引用了一些列. 您只需要这些列的UPDATE权限. 读取了一些列,但未修改. 您只需要对这些列具有SELECT权限.
如果您使用的多表UPDATE语句包含具有外键限制的InnoDB表,则MySQL优化器处理表的顺序可能与上层和下层关系的顺序不同.
在这种情况下,该语句无效并回滚. 同时,更新单个表,并依靠ON UPDATE函数.
此功能由InnoDB提供,用于相应地修改其他表.
当前,您无法更新子查询中的表并同时从同一表中选择.
update语句的几种基本用法
A. 使用简单的UPDATE
以下示例显示了如果从UPDATE语句中删除WHERE子句,将如何影响所有行.
下面的示例说明了表发布者中的所有发布者如何将总部迁移到佐治亚州的亚特兰大,表发布者是如何更新的.
复制代码,代码如下:
更新发布者
设置城市='亚特兰大',州='GA'
此示例将所有发布者名称更改为NULL.
复制代码,代码如下:
更新发布者
SET pub_name = NULL
计算的值也可以在更新中使用. 此示例将表标题中的所有价格加倍.
复制代码,代码如下:
更新标题
设置价格=价格* 2
B. 将WHERE子句与UPDATE语句一起使用
WHERE子句指定要更新的行. 例如,在下面的虚拟事件中,北加利福尼亚州将其名称更改为Pacifica(缩写为PC),奥克兰市民投票将其城市名称更改为Bay City. 此示例显示如何为奥克兰市以前的所有居民(其地址已过时)更新表作者.
复制代码,代码如下:
更新作者
设置状态=“ PC”,城市=“海湾城市”
所在州='CA'和城市='奥克兰'
必须写另一条声明来更改北加利福尼亚其他城市居民的州名.
C. 通过UPDATE语句使用另一个表中的信息
此示例修改了titles表中的ytd_sales列,以反映表销售额中的最新销售记录.
复制代码,代码如下:
更新标题
SET ytd_sales = titles.ytd_sales + sales.qty
FROM标题,销售
titles.title_id = sales.title_id
AND sales.ord_date =(从销售中选择MAX(sales.ord_date)个)
此示例假定特定产品仅记录特定日期的一批销售,并且更新是最新的. 如果不是这种情况(即,如果某个特定产品可以在同一天记录多个批次的销售),则此处显示的示例将出错. 该示例正常运行,但是无论当天实际销售多少批次,每个产品仅更新了一批销售量. 这是因为UPDATE语句永远不会更新同一行两次.
对于可以在同一天进行多批销售的特定产品,必须在UPDATE语句中将每种产品的所有销售加在一起,如下例所示:
复制代码,代码如下:
更新标题
SET ytd_sales =
(SELECT SUM(qty)
从销售
sales.title_id = titles.title_id
AND sales.ord_date IN(从销售中选择MAX(ord_date)个)
FROM标题,销售
D. 将UPDATE语句与SELECT语句中的TOP子句一起使用
此示例更新了authors表中前十位作者的状态列.
复制代码,代码如下:
更新作者
SET状态='ZZ'
从(从作者开始,按au_lname的顺序排序,前10位*)作为t1
wheres authors.au_id = t1.au_id
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-245186-1.html
我是南昌在校大学生
所以中国也不好说