视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Mysql使用小结:(1)存储过程,循环,实现MssqlServer功能的exec_MySQL
2020-11-09 17:53:04 责编:小采
文档


最近开始总结自己学习的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:10。这点无论是使用命令行还是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小时。

下载本文
显示全文
专题