您好,欢迎访问一九零五行业门户网

Mysql使用小结:(1) 存储过程,循环,实现Mssql Server功能的exec_MySQL

最近开始总结自己学习的mysql的经验,在这里跟大家分享。很希望大家很拍板砖,谢谢。
先说说,为什么我要学习mysql的存储过程,因为mysql在单纯的script(脚本)里面,不支持循环。大家可以参考相关的文档。
先给出代码:
delimiter $$
drop procedure if exists `dowhile` $$
create procedure  `dowhile`()
deterministic
begin
declare v1 int default 1000;
  declare tablename varchar(10) default 'testtable';
  declare createstring varchar(1000);
while v1  0 do
      set @nexttable = concat(tablename,v1);
      set createstring = concat(create table `,@nexttable);
      set createstring = concat(createstring,` ( `id` int null, `name` varchar(200) null); );
      set @mytable = createstring;
      select @mytable;
      prepare stmt_name from @mytable;
      execute stmt_name ;
      deallocate prepare stmt_name;
set v1 = v1 -1;
  end while;
end$$
delimiter ;
第一步:建立一个mysql存储过程,必须要注意的地方是:一定要使用 delimiter(定界符这个)关键字,否则会产生errornum:1064。这点无论是使用命令行还是mysql tools(workbench)都必须遵守。
具体参考:http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html ,又一次证明了,仔细阅读文档很重要。
更多参考:http://dev.mysql.com/doc/refman/5.1/en/stored-routines.html
第二步:使用循环,必须在mysql存储过程中,希望mysql新版本可以进行改进。
原文be used in the body of stored programs: stored procedures and functions, triggers, and events. these objects are defined in terms of sql code that is stored on the server for later invocation  
具体参考:http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-compound-statements.html
第三步:使用 prepare命令,打开一个stmt,不要忘记关上。
具体参考:http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html
小结:
我这里使用循环,但是实际完成建表过程,只实现了300次。是不是在存储过程中,循环有限制?
探索1:循环限制,设置while循环最大循环数为100000,没有任何问题。时间:0.406秒 。(双核 2.47)
探索2:                                      循环数为10000000,没有任何问题。时间:27.753秒。
探索3:                                      循环数为20000000,没有任何问题。时间:48.578秒。
超过30秒的限制。
当超过10分钟之后,连接断开。主要分析,发现workbench有一个自己的数据库连接时间,10分钟。
通过阅读发现了mysql的超时设置是interactive_timeout = wait_timeout:28800s (480min) 6小时。
其它类似信息

推荐信息