正确使用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的join buffer原理
Apr 29 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
Mysql基础知识点汇总
May 26 MySQL
Mysql 设置boolean类型的操作
Jun 04 MySQL
MySQL中日期型单行函数代码详解
Jun 21 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
MySQL主从切换的超详细步骤
Jun 28 MySQL
mysql查看表结构的三种方法总结
Jul 07 MySQL
MySQL远程无法连接的一些常见原因总结
Sep 23 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中的错误处理、异常处理机制分析
2012/05/07 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
解决Python requests 报错方法集锦
2017/03/19 Python
django使用admin站点上传图片的实例
2019/07/28 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
python 生成器需注意的小问题
2020/09/29 Python
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
经典c++面试题六
2012/01/18 面试题
药学专业个人的自我评价
2013/12/31 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
个人银行贷款担保书
2014/04/01 职场文书
销售岗位职责范本
2014/06/12 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS