找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3646|回复: 3

[教程] 关于update 是否加limit的看法

[复制链接]
发表于 2013-3-29 11:55:05 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
关于update 是否要加limit的问题,特地找了一篇文章大家可以参考看看

个人的一些观点,不知正确与否
   where    更新的条件
        1,更新的条件要是   例如:  id=数字    且 id是主键自增长的  加不加limint 无所谓 id是唯一的。
       2,更新的条件要是 如:     name='admin'   name 是普通字符串字段的话  加limit  这种情况的话update 会把整个表走一遍,匹配 name='admin'   比较耗资源


以下是原文:
 单表的MySQL UPDATE语句:
  UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
  SET col_name1=expr1 [, col_name2=expr2 ...]
  [WHERE where_definition]
  [ORDER BY ...]
  [LIMIT row_count]
  多表的UPDATE语句:
  UPDATE [LOW_PRIORITY] [IGNORE] table_references
  SET col_name1=expr1 [, col_name2=expr2 ...]
  [WHERE where_definition]

  UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有WHERE子句,则更新所有的行。如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。LIMIT子句用于给定一个限值,限制可以被更新的行的数目。
  MySQL UPDATE语句支持以下修饰符:
  如果您使用LOW_PRIORITY关键词,则UPDATE的执行被延迟了,直到没有其它的客户端从表中读取为止。
  如果您使用IGNORE关键词,则即使在更新过程中出现错误,更新语句也不会中断。如果出现了重复关键字冲突,则这些行不会被更新。如果列被更新后,新值会导致数据转化错误,则这些行被更新为最接近的合法的值。
  如果您在一个表达式中通过tbl_name访问一列,则UPDATE使用列中的当前值。例如,以下语句把年龄列设置为比当前值多一:

  MySQL> UPDATE persondata SET ageage=age+1;
  MySQL UPDATE赋值被从左到右评估。例如,以下语句对年龄列加倍,然后再进行增加:
  MySQL> UPDATE persondata SET ageage=age*2, ageage=age+1;
  如果您把一列设置为其当前含有的值,则MySQL会注意到这一点,但不会更新。
  如果您把被已定义为NOT NULL的列更新为NULL,则该列被设置到与列类型对应的默认值,并且累加警告数。对于数字类型,默认值为0;对于字符串类型,默认值为空字符串('');对于日期和时间类型,默认值为“zero”值。
  UPDATE会返回实际被改变的行的数目。MySQL_info() C API函数可以返回被匹配和被更新的行的数目,以及在UPDATE过程中产生的警告的数量。
  您可以使用LIMIT row_count来限定UPDATE的范围。LIMIT子句是一个与行匹配的限定。只要发现可以满足WHERE子句的row_count行,则该语句中止,不论这些行是否被改变。
  如果一个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中,有些列被引用。您只需要这些列的MySQL UPDATE权限。有些列被读取了,但是没被修改。您只需要这些列的SELECT权限。
  如果您使用的multiple-table UPDATE语句中包含带有外键限制的InnoDB表,则MySQL优化符处理表的顺序可能与上下层级关系的顺序不同。在此情况下,语句无效并被 回滚。同时,更新一个单一表,并且依靠ON UPDATE功能。该功能由InnoDB提供,用于对其它表进行相应的修改。
  

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2013-3-29 15:13:47 | 显示全部楼层 来自 中国–广东–深圳
这些都不怎么懂

点评

正在学习中额  详情 回复 发表于 2013-3-29 21:27

评分

参与人数 1金币 +5 收起 理由
抢楼评分专号 + 5 很幸运,你获得了抢楼奖励!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-29 21:27:00 | 显示全部楼层 来自 中国–广东–湛江
悦鹜 发表于 2013-3-29 15:13
这些都不怎么懂

正在学习中额

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

发表于 2013-3-31 16:42:44 | 显示全部楼层 来自 中国–山西–阳泉
学习,不停得学习啊

评分

参与人数 1金币 +1 收起 理由
抢楼评分专号 + 1 很幸运,你获得了抢楼奖励!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 01:33 , Processed in 0.051583 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表