MySql如何查询出来一条数据再插进去 | MySql如何将查询
前言:
有一张表,表里有N多字段。其中有两个需要注意的字段,那就是ID(整型)、和订单Number(varchar),这两个是唯一值,不能重复。ID是自增主键。
现在有这样一需求:
因项目需要测试数据,每条有效 数据记录 需要 复制3条相同的 数据记录(除了ID和订单Number)。
且一条记录N多字段,只有ID和订单Number不同。
这样,就会产生很多机械、无用动作。
寻常人的做法,是一个一个字段去复制,最后只改ID和订单Number。费时费力。
但作为一个程序员,这样去做,明显很“笨拙”。更重要的原因是,时间不允许。
接下来,就是如何去做,
达到:复制一条数据,改变ID和订单Number,且【尽量少做机械、无用动作】
0x001
insert into testzzy (age) select age from testzzy where id = 2;
UPDATE testzzy set id = (2*10000+0) , number = "我是每次要修改的数据" WHERE id = (SELECT LAST_INSERT_ID())
注: LAST_INSERT_ID() 仅适用于 insert 语句 插入的记录。手动插入的数据无效。(已测试)
介绍一下上面两条SQL语句意义(因项目中字段N多,为了解说,这里只取几个)
第一条:去插入到testzzy表中一条字段为age的数据,这条数据是从testzzy表中查出ID为2的数据。
简单来说,就是从同一张表中,取出一条ID为2的数据,再插入进去。(注:ID为自增主键,插入时无需指定)
第二条:更新testzzy 表中 id =20000 , number = "我是每次要修改的数据" ,更新的id是 最后一次插入的ID。
简单来说,就是将刚刚复制出来的数据,id改为原来ID的10000倍,且+上复制下标。(这样就能保证复制出来的数据有可追溯性)
number按需求去改就行了。
两条SQL语句一起执行,这样,机械动作大大减少。
但,还没达到想要的效果。
(这样做,虽然可以复制出想要的数据,但每条记录字段N多,需要每次拉动MySql连接工具的滚动条,修改完后再去改多少倍)
0x002:
最好的效果就是去写个程序,让程序来做这些 机械动作。
如图:
这样,每次只需输入要复制记录数据的ID,要修改字段的数据内容,最后点复制,就大功告成了。
看一下效果图:
0x003:
眼尖的程序员发现了,底部那个按钮是做什么的?
自增主键有这样一个特性,当你的ID从某个值调到更高的值时,再去增加数据,那么ID将以这个【更高的ID值为基础】去增长
举个例子:现在我们的ID为20,手动插入ID为100的一条记录。此时再去增加一条数据,ID会从101去自增。并不会从21去自增。
那么底部这个按钮就是为了解决这个问题。(前提是须将测试的废弃数据删掉,否则无效)
SELECT id from testzzy ORDER BY id DESC LIMIT 0,1;
alter table testzzy auto_increment = 上条语句查出来的值;
0x004:
这样就解决了问题,个人能力有限,欢迎有更简洁方法的前辈指教!
完结。