首先,单个表的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语句支持以下修饰符:
LOW_PRIORITY关键字会延迟更新的执行,直到不再从表中读取其他客户端。
如果使用IGNORE关键字,则即使在更新过程中出现错误,
如果发生重复的关键字冲突,这些行不会更新。 更新列后,如果新值导致数据转换错误,这些行将更新为最近的有效值。
从表达式的tbl_name访问列时,UPDATE使用列的当前值。
例如,将“年龄”列设置为比当前值多1,个值
复制代码。 代码为以下:
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函数返回匹配和更新的行数以及在更新期间生成的警告数。
可以使用LIMIT row_count来限制更新的范围。 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。
注意不能在更新:多表的同时使用订单依据或限制。
修改后的多表UPDATE引用了几列。 只需要这些列的UPDATE权限。 读取了几列,但没有更改。 这些列只需要SELECT权限。
如果使用的是包含具有外键约束的InnoDB表的多表UPDATE语句,则MySQL优化程序处理表的顺序可能与高级别和低级别关系的顺序不同。
在这种情况下,此语句无效并回滚。 同时更新各个表,依赖于ON UPDATE函数。
此功能由InnoDB提供,并相应地用于修改其他表。
当前,不能更新子查询中的表并同时从同一表中选择。
update语句的几种基本用法
a .使用简单的更新
以下示例说明从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-甜美的蜻蜓.com/a/jisuanjixue/article-245186-1.html