mysql update语句的用法详解 |
本文标签:mysql,update 首先,单表的UPDATE语句: UPDATE [LOW_PRIORITY] [IGNORE] tbl_name 其次,多表的UPDATE语句: UPDATE [LOW_PRIORITY] [IGNORE] table_references UPDATE语法可以用新值更新原有表行中的各列 。 SET子句指示要修改哪些列和要给予哪些值 。WHERE子句指定应更新哪些行 。 UPDATE语句支持以下修饰符: 1,如果您使用LOW_PRIORITY关键词,则UPDATE的执行被延迟了,直到没有其它的客户端从表中读取为止 。 2,如果您使用IGNORE关键词,则即使在更新过程中出现错误,更新语句也不会中断 。 如果您在一个表达式中通过tbl_name访问一列,则UPDATE使用列中的当前值 。 例如,把年龄列设置为比当前值多一: 复制代码 代码如下: mysql> UPDATE persondata SET age=age+1; UPDATE赋值被从左到右评估 。 例如,对年龄列加倍,然后再进行增加: 复制代码 代码如下: mysql> UPDATE persondata SET age=age*2, age=age+1; 如果您把一列设置为其当前含有的值,则MySQL会注意到这一点,但不会更新 。 如果您把被已定义为NOT NULL的列更新为NULL,则该列被设置到与列类型对应的默认值,并且累加警告数 。 UPDATE会返回实际被改变的行的数目 。Mysql_info() C API函数可以返回被匹配和被更新的行的数目,以及在UPDATE过程中产生的警告的数量 。 您可以使用LIMIT row_count来限定UPDATE的范围 。LIMIT子句是一个与行匹配的限定 。 如果一个UPDATE语句包括一个ORDER BY子句,则按照由子句指定的顺序更新行 。 您也可以执行包括多个表的UPDATE操作 。table_references子句列出了在联合中包含的表 。 例子: 复制代码 代码如下: SQL>UPDATE items,month SET items.price=month.price WHERE items.id=month.id; 说明:以上代码显示出了使用逗号操作符的内部联合,但是multiple-table UPDATE语句可以使用在SELECT语句中允许的任何类型的联合,比如LEFT JOIN 。 注释:不能把ORDER BY或LIMIT与multiple-table UPDATE同时使用 。 在一个被更改的multiple-table UPDATE中,有些列被引用 。您只需要这些列的UPDATE权限 。有些列被读取了,但是没被修改 。您只需要这些列的SELECT权限 。 如果您使用的multiple-table UPDATE语句中包含带有外键限制的InnoDB表,则MySQL优化符处理表的顺序可能与上下层级关系的顺序不同 。 在此情况下,语句无效并被 回滚 。同时,更新一个单一表,并且依靠ON UPDATE功能 。 目前,不能在一个子查询中更新一个表,同时从同一个表中选择 。 update语句的几种基本用法 A. 使用简单的 UPDATE 下列示例说明如果从 UPDATE 语句中去除 WHERE 子句,所有的行会受到什么影响 。 下面这个例子说明,如果表 publishers 中的所有出版社将总部搬迁到佐治亚州的亚特兰大市,表 publishers 如何更新 。 复制代码 代码如下: UPDATE publishers SET city = Atlanta, state = GA 本示例将所有出版商的名字变为 NULL 。 复制代码 代码如下: UPDATE publishers SET pub_name = NULL 也可以在更新中使用计算值 。本示例将表 titles 中的所有价格加倍 。 复制代码 代码如下: UPDATE titles SET price = price * 2 B.把 WHERE 子句和 UPDATE 语句一起使用 复制代码 代码如下: UPDATE authors SET state = PC, city = Bay City WHERE state = CA AND city = Oakland 必须编写另一个语句来更改北加利福尼亚其它城市的居民所在的州名 。 C.通过 UPDATE 语句使用来自另一个表的信息 复制代码 代码如下: UPDATE titles SET ytd_sales = titles.ytd_sales + sales.qty FROM titles, sales WHERE titles.title_id = sales.title_id AND sales.ord_date = (SELECT MAX(sales.ord_date) FROM sales) 这个例子假定,一种特定的商品在特定的日期只记录一批销售量,而且更新是最新的 。如果不是这样(即如果一种特定的商品在同一天可以记录不止一批销售量),这里所示的例子将出错 。例子可正确执行,但是每种商品只用一批销售量进行更新,而不管那一天实际销售了多少批 。这是因为一个 UPDATE 语句从不会对同一行更新两次 。 对于特定的商品在同一天可销售不止一批的情况,每种商品的所有销售量必须在 UPDATE 语句中合计在一起,如下例所示: 复制代码 代码如下: UPDATE titles SET ytd_sales = (SELECT SUM(qty) FROM sales WHERE sales.title_id = titles.title_id AND sales.ord_date IN (SELECT MAX(ord_date) FROM sales)) FROM titles, sales D. 将 UPDATE 语句与 SELECT 语句中的 TOP 子句一起使用 复制代码 代码如下: UPDATE authors SET state = ZZ FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1 WHERE authors.au_id = t1.au_id 以上就是mysql update语句用法的全部内容,希望对大家有所帮助 。 |