正确使用MySQL update语句


Posted in MySQL onMay 26, 2021

以下的文章主要介绍的是MySQL update 语句的实际用法,我们首先是以单表的UPDATE语句来引出实现MySQL update 语句的实际方案,以下就是文章的详细内容描述。

单表的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提供,用于对其它表进行相应的修改。

目前,您不能在一个子查询中更新一个表,同时从同一个表中选择。

以上的相关内容就是对MySQL update的介绍,希望对大家的学习有所帮助。

MySQL 相关文章推荐
MySQL索引篇之千万级数据实战测试
Apr 05 MySQL
left join、inner join、right join的区别
Apr 05 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
MySQL 数据类型详情
Nov 11 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 MySQL
详解MySQL集群搭建
MySQL中VARCHAR与CHAR格式数据的区别
May 26 #MySQL
修改MySQL的默认密码的四种小方法
May 26 #MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 #MySQL
Mysql数据库命令大全
May 26 #MySQL
Mysql基础知识点汇总
May 26 #MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 #MySQL
You might like
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
jQuery 动画基础教程
2008/12/25 Javascript
js获取域名的方法
2015/01/27 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
django 自定义用户user模型的三种方法
2014/11/18 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
Django Rest framework频率原理与限制
2019/07/26 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers