56,679
社区成员
发帖
与我相关
我的任务
分享
(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]-- 先执行一次,把行数记录下来( 也可以直接用 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;
--新表
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