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更新语句的全部内容,希望对您有所帮助。