MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert

MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert_第1张图片


前言:

有一张表,表里有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语句一起执行,这样,机械动作大大减少。


MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert_第2张图片
MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert_第3张图片

但,还没达到想要的效果。

(这样做,虽然可以复制出想要的数据,但每条记录字段N多,需要每次拉动MySql连接工具的滚动条,修改完后再去改多少倍)


MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert_第4张图片

0x002:

最好的效果就是去写个程序,让程序来做这些  机械动作。

如图:


MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert_第5张图片

这样,每次只需输入要复制记录数据的ID,要修改字段的数据内容,最后点复制,就大功告成了。

看一下效果图:


MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert_第6张图片
MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert_第7张图片

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:

这样就解决了问题,个人能力有限,欢迎有更简洁方法的前辈指教!

完结。

你可能感兴趣的:(MySql如何查询出来一条数据再插进去 | MySql如何将查询出来的数据修改后再插进去 | update | insert)