重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我没有你的表结构和数据,所以随便找了张表作为例子,你看懂了改一下sql就可以了:
创新互联是一家以网络技术公司,为中小企业提供网站维护、网站设计制作、网站制作、网站备案、服务器租用、申请域名、软件开发、微信小程序开发等企业互联网相关业务,是一家有着丰富的互联网运营推广经验的科技公司,有着多年的网站建站经验,致力于帮助中小企业在互联网让打出自已的品牌和口碑,让企业在互联网上打开一个面向全国乃至全球的业务窗口:建站联系热线:18982081108
目的:修改roomPeople=20的倒数第三条数据的roomType字段为999,roomId为主键
这是原始数据:很明显我们要修改的数据roomId为105
修改步骤:
1、找到roomPeople=20的数据:
2、取最后3条数据:
3、获得要修改的目标行的roomId字段
4、根据查找到的主键进行修改操作:
5、修改后数据为:
很明显,目的达到了,roomId为105的数据的roomType字段被修改为了999
所有sql如下:
#原始数据-按roomId升序排序
select roomId,roomType,roomPeople from room15
#修改roomPeople=20的倒数第三条数据的roomType字段为999
UPDATE room15
set roomType=999
where roomId=(
select t1.roomId
from (
select roomId,roomType,roomPeople
from room15
where roomPeople=20
ORDER BY roomId desc
LIMIT 3) as t1
ORDER BY roomId
LIMIT 1
)
#修改后数据-按roomId升序排序
select roomId,roomType,roomPeople from room15
楼主若觉得回答有所帮助,望采纳,谢谢!
import_table(importTable) 的延申功能:可定制化行输入。
import_table(importTable) 我们之前有介绍过,是一款并行导入各种格式文本的工具,封装了 MySQL 语句 load data local infile。
比如说要导入一个以 TAB 为分隔符的文本数据文件:/tmp/sample_ytt.txt 到表:ytt_new.t1,可以执行下面语句:
上面结果是 load data infile 语句的导入结果。如果改用 import_table 方法来做同样的事情,基于 Python 语法,使用方法如下:
那接下来看另外一个需求:在导入文本文件时对每行做预处理(例如在导入数据之前更改列 r2 的值为 mod(r1,10),列 r5 的值为 abs(r4-46) ),这样可以减少导入后再次处理的时间开销。
这个需求用 load data infile 语句非常容易实现:(导入时更改列 r2 和 r5 的数据,类似 UPDATE 语法)
那如果要用 util.import_table(importTable) 来实现上面的需求,在 MySQL 8.0.22 之前是没办法的。
随着 MySQL 8.0.22 的发布,MySQL 对 import_table 方法做了些扩充功能,其中增加了一个选项 “decodeColumns” 可以实现字段的预先输入定制化功能,并且还可以更加丰富。
接下来用 import_table 来实现上面的需求,定制化字段 r2 和 r5:
以上 Options 选项,见下图:
我来具体解释下上图的含义:蓝色字体 columns 对应的数组分别指定数据文件中的每行字段,也就是默认的 TAB 分隔符所分割的每列值,1 和 2 代表占位符,1 代表数据文件中每行的第一个列,2 代表数据文件中每行的第四列,decodeColumns 字典分别对需要预先输入的字段做处理。比如 r1 字段保留为变量 @1,r2 字段对应 mod(r1,10) 等。
如果还是不太理解变换规则,可以临时打开 general log, 上面 import_table(importTable)对应的 MySQL 日志为:
以上日志写的很清楚,内部转换为最基本的load data infile语法。
那这里我简单解读了下 MySQL 8.0.22 对 MySQL Shell 的一项定制化输入文本文件的新特性,更多的新特性可以继续关注。
update table_person set name='abc',phone='18888888..',qq='11111111' ;
java只做调用的吧,与mysql语句怎么写应该木有关系,要修改哪一栏自选择,