MySQL更新语句使用的详细说明

首先,单表更新语句:

更新low_priority } { } {忽略tbl_name

集col_name1 = expr1 expr2 } {,col_name2 =…

where_definition {在}

{由…订购}

{极限row_count }

第二,多表更新语句:



更新low_priority } { } {忽略table_references

集col_name1 = expr1 expr2 } {,col_name2 =…

where_definition {在}

更新语法可以用一个新值更新原始表行中的列。

set子句指示要修改哪些列和要给出哪些值。WHERE子句指定应更新哪些行。

如果没有WHERE子句,所有行都会被更新。如果指定了BY子句,则行将按指定的顺序更新。

限制子句用于给定的限制,以限制可以更新的行数。

UPDATE语句支持以下修饰符:

1、如果你使用low_priority关键词,更新的执行被延迟直到没有其他客户端读取表。

2,如果使用忽略关键字,即使在更新过程中发生错误,更新语句也不会被中断。

如果重复出现关键字冲突,这些行将不会被更新。如果更新了列,新值会导致数据转换错误,这些行将更新为最近的合法值。

如果你访问一个列中通过表达tbl_name,更新使用当前值在列。

例如,年龄列设置的值大于当前值:



复制代码代码如下:MySQL >更新PersonData设定年龄=年龄+ 1;



更新赋值从左向右求值。

例如,年龄增加一倍,然后增加:



复制代码代码如下:MySQL >更新PersonData设定年龄=年龄×2,年龄=年龄+ 1;



如果将列设置为当前值,MySQL会注意到这一点,但是它不会被更新。

如果更新已定义为null为null的列,则将该列设置为与列类型对应的默认值,并将其添加到警告的数量中。

对于数字类型,默认值是0;对于String类型,默认值是空字符串();对于日期和时间类型,默认值为零。

更新返回行,实际上是改变了一些,mysql_info()C API函数可以返回的行匹配和更新的数量,以及在更新过程中产生的一些警告。

你可以使用极限row_count限制更新的范围,限制条款是限制线匹配。

声明中止只要row_count线满足WHERE子句停产,不管这些行的改变。

如果UPDATE语句包含一个BY子句,则根据该语句指定的顺序进行更新。

您还可以执行更新操作,包括多个表,table_references子句列出包含在联盟的表。

实例uff1a

复制代码代码如下所示:

已更新的项目,一个项目的价格= month.price。

在项目month.id ID =;



注意:上面的代码使用逗号操作符显示内部联合,但是多个表UPDATE语句可以使用SELECT语句中允许的任何类型的联合,如左连接。

注意:您不能同时使用多个表更新的顺序或限制。

在已更改的多表更新中,有些列被引用。只需要这些列的更新权限。有些列被读取了,但没有被修改。只需要这些列的选择权限。

如果你使用多个表的UPDATE语句包含外键约束的InnoDB表,那么MySQL的顺序优化处理表可能不同于上下级的命令。

在这种情况下,语句无效并回滚。同时,更新单个表并依赖于更新功能。

这个功能是由InnoDB是用于修改其他表。

目前,你不能更新查询表,和来自同一个表中选择。

更新语句的几种基本用法

A.使用简单更新

下面的示例显示如果从UPDATE语句中删除WHERE子句,那么所有行受到什么影响。

下面的示例显示,如果表发布者中的所有发布者将总部迁移到亚特兰大格鲁吉亚,那么如何更新表发布者呢

复制代码代码如下所示:

更新发布

设置城市= 'atlanta状态'ga



此示例将所有发布者的名称更改为null。

复制代码代码如下所示:

更新发布

集pub_name = null



您也可以使用更新中的计算值。

复制代码代码如下所示:

更新的标题

定价=价格* 2



b.将WHERE子句和UPDATE语句一起使用。

WHERE子句指定要更新的行。例如,在下面的虚构事件,北加利福尼亚更名为太平洋(简称PC),而奥克兰的投票改变城市名称海湾城市的市民。这个例子展示了如何更新所有奥克兰原居民(他们的地址是过时的)更新表作者。

复制代码代码如下所示:

更新的作者

设置状态= 'pc,城市= 'bay市

国家= 'ca'and市= 'oakland



你必须写一份声明来改变加利福尼亚北部的其他城市居民。

C.使用UPDATE语句使用另一个表中的信息。

这个例子修改ytd_sales列表标题反映表销售最新的销售记录。

复制代码代码如下所示:

更新的标题

集ytd_sales = titles.ytd_sales + sales.qty

从标题,销售

在titles.title_id = sales.title_id

和sales.ord_date =(选择最大(销售。ord_date)从销售)



这个例子假设一个特定的商品只记录一批销售在一个特定的日期,和更新是最新的。如果不是这样的话(也就是说,如果一个特定的商品可以在同一天记录超过一批销售),这里的例子是错的。例子可以正确地进行,但每个产品只有一批销售更新,无论多少批次其实那天出售。这是因为一个UPDATE语句不会更新相同的线的两倍。

对于某一特定商品,它可以在同一天卖出一批以上的商品,并且每一商品的销售量都必须在更新报表中汇总在一起。

复制代码代码如下所示:

更新的标题

为ytd_sales

(选择金额(数量))

从销售

在sales.title_id = titles.title_id

在和sales.ord_date(选择最大(ord_date)从销售))

从标题,销售



d.将UPDATE语句与SELECT语句中的top子句一起使用

此示例更新表作者中前十个作者的状态列。

复制代码代码如下所示:

更新的作者

设置状态= 'zz

从(select top 10 *由au_lname T1为作者)

在authors.au_id = t1.au_id



以上是使用mysql更新语句的全部内容,希望对您有所帮助。