Mysql使用小結:(1) 預存程序,迴圈,實現Mssql Server功能的exec的方法

來源:互聯網
上載者:User

最近開始總結自己學習的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小時。

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.