mysql 循环插入问题

crmserver 2018-01-30 04:29:11

select id, name from tblogin where id=1;
//结果:有2条记录


insert into tblogin(id, name) select id, name from tblogin where id=1;
//成功插入2条记录到tblogin表


//再次运行这个语句循环插入
insert into tblogin(id, name) select id, name from tblogin where id=1;
//成功插入4条记录到tblogin表,如何让它还是插入2条记录,而不是4条记录,也就是记录第一次的查询结果
...全文
1425 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaovhao 2018-02-13
  • 打赏
  • 举报
回复
你可以先看一下最原始的时候这张表的最大id是多少,然后加上条件insert into tblogin(id, name) select id, name from tblogin where id=1 and Id<=最大id
ACMAIN_CHM 2018-02-05
  • 打赏
  • 举报
回复
insert into tblogin(id, name) select id, name from tblogin where id=1 limit 2;
crmserver 2018-01-31
  • 打赏
  • 举报
回复
执行如下语句后,插入的数量不是我想要的


(1)、select id, name from tblogin where id=1; -- 结果有2条记录


(2)、执行以下语句
[code=sql]

-- 先执行一次,把行数记录下来
insert into tblogin(id, name) select id, name from tblogin where id=1;
set @r=found_rows(); -- 6, 18
 
-- 后面的执行,使用动态语句( limit 不能直接用变量 )
prepare st from 'insert into tblogin(id, name) select id, name from tblogin where id=1 limit ?';
-- 多次执行的是这个
execute st using @r;
-- 完成之后释放
deallocate prepare st;


(3)、检查发现select id, name from tblogin where id=1; -- 结果有6条记录,即刚才插入了4条记录 (4)、再次执行(2),检查发现select id, name from tblogin where id=1; -- 结果有18条记录,即刚才插入了12条记录 若改成: -- 先执行一次,把行数记录下来 select @r:=count(*) from tblogin where id=1; set @r=found_rows(); -- 后面的执行,使用动态语句( limit 不能直接用变量 ) prepare st from 'insert into tblogin(id, name) select id, name from tblogin where id=1 limit ?'; -- 多次执行的是这个 execute st using @r; -- 完成之后释放 deallocate prepare st; 检查发现select id, name from tblogin where id=1; -- 每次只插入1条记录 [/code]
zjcxc 2018-01-31
  • 打赏
  • 举报
回复
-- 先执行一次,把行数记录下来( 也可以直接用 select @r:=count(*) from tblogin where id=1;
insert into tblogin(id, name) select id, name from tblogin where id=1;
set @r=found_rows();

-- 后面的执行,使用动态语句( limit 不能直接用变量 )
prepare st from 'insert into tblogin(id, name) select id, name from tblogin where id=1 limit ?';
-- 多次执行的是这个
execute st using @r;
-- 完成之后释放
deallocate prepare st;
crmserver 2018-01-30
  • 打赏
  • 举报
回复
不确定是这种情况,如: select id, name from tblogin where id=1; //有2条记录 select id, name from tblogin where id=2; //有5条记录 select id, name from tblogin where id=3; //有14条记录 也就是不确定limit后面是几
zjcxc 2018-01-30
  • 打赏
  • 举报
回复
不确定是什么情况? 来自变量?
crmserver 2018-01-30
  • 打赏
  • 举报
回复
想用limit做限制,但是不确定select 结果有几条记录?怎么弄
zjcxc 2018-01-30
  • 打赏
  • 举报
回复
简单地说就是 LIMIT 限制一下,但这不保证一定是 INSERT 最初的 2 条, 如果要保证,参考1楼的 insert into tblogin(id, name) select id, name from tblogin where id=1 limit 2;
听雨停了 2018-01-30
  • 打赏
  • 举报
回复
把这个表的两条记录插入到一个新表中,之后一直循环这个新表插入就行了。比如下面这样

--新表
CREATE TABLE tab_test(
	select id, name from tblogin where id=1
);


insert into tblogin(id, name) select id, name from tab_test
//成功插入2条记录到tblogin表


//再次运行这个语句循环插入
insert into tblogin(id, name) select id, name from tab_test

liu志坚 2018-01-30
  • 打赏
  • 举报
回复
建了临时表,create table tblogin_tmp as select id, name from tblogin where id=1; 每次插入都执行 insert into tblogin(id, name) select id, name from tblogin_tmp ; 这样就可以了。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧