正确使用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
详解MySQL主从复制及读写分离
May 07 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
Mysql 用户权限管理实现
May 25 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
MySQL分区表实现按月份归类
Nov 01 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
详细聊一聊mysql的树形结构存储以及查询
Apr 05 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 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自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
关于延迟加载JavaScript
2015/05/05 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
深入理解ES7的async/await的用法
2017/09/09 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
Python松散正则表达式用法分析
2016/04/29 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
.NET初级开发工程师面试题
2014/04/18 面试题
一套软件测试笔试题
2014/07/25 面试题
绿色环保演讲稿
2014/05/10 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
大学体育课感想
2015/08/10 职场文书
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技
基于Python实现nc批量转tif格式
2022/08/14 Python