程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL應用游標批量處置停止表操作

MySQL應用游標批量處置停止表操作

編輯:MySQL綜合教程

MySQL應用游標批量處置停止表操作。本站提示廣大學習愛好者:(MySQL應用游標批量處置停止表操作)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL應用游標批量處置停止表操作正文


1、概述

本章節引見應用游標來批量停止表操作,包含批量添加索引、批量添加字段等。假如對存儲進程、變量界說、預處置還不是很熟習先浏覽我後面寫過的關於這三個概念的文章,只要先懂得了這三個概念能力更好的懂得這篇文章。

懂得MySQL變量和前提:http://www.jb51.net/article/81375.htm

懂得Mysql prepare預處置語句:http://www.jb51.net/article/81378.htm

懂得MySQL存儲進程和函數:http://www.jb51.net/article/81381.htm

2、注釋

1、聲明光標

DECLARE cursor_name CURSOR FOR select_statement

這個語句聲明一個光標。也能夠在子法式中界說多個光標,然則一個塊中的每個光標必需有獨一的名字。

留意:SELECT語句不克不及有INTO子句。

2、翻開光標

DECLARE cursor_name CURSOR FOR select_statement

這個語句翻開先前聲明的光標。

3、進步光標

FETCH cursor_name INTO var_name [, var_name] ...

這個語句用指定的翻開光標讀取下一行(假如有下一行的話),而且進步光標指針。

4、封閉光標

CLOSE cursor_name

這個語句封閉先前翻開的光標。

 5、批量添加索引

同享一個批量添加索引的游標,當一個庫中有上百張表構造一樣然則稱號紛歧樣的表,這個時刻批量操作就變得簡略了。

#刪除創立存儲進程
DROP PROCEDURE IF EXISTS FountTable;
DELIMITER $$
CREATE PROCEDURE FountTable()
BEGIN
  DECLARE TableName varchar(64); 
  #聲明游標
  DECLARE cur_FountTable CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='front' AND TABLE_NAME LIKE 'student%';
  DECLARE EXIT HANDLER FOR not found CLOSE cur_FountTable;
  #翻開游標
  OPEN cur_FountTable;
  REPEAT
     FETCH cur_FountTable INTO TableName;
     #界說預處置
     SET @SQLSTR1 = CONCAT('create index Flag on ','`',TableName,'`',' (Flag); '); 
     SET @SQLSTR2 = CONCAT('create index State on ','`',TableName,'`',' (State); '); 
     SET @SQLSTR3 = CONCAT('create index upload on ','`',TableName,'`',' (upload); '); 
     SET @SQLSTR4 = CONCAT('create index ccFlag on ','`',TableName,'`',' (lockFlag); '); 
     SET @SQLSTR5 = CONCAT('create index comes on ','`',TableName,'`',' (comes); '); 
     ###SET @SQLSTR=CONCAT(@SQLSTR1,@SQLSTR2,@SQLSTR3,@SQLSTR4,@SQLSTR5 );
     PREPARE STMT1 FROM @SQLSTR1; 
     PREPARE STMT2 FROM @SQLSTR2; 
     PREPARE STMT3 FROM @SQLSTR3; 
     PREPARE STMT4 FROM @SQLSTR4; 
     PREPARE STMT5 FROM @SQLSTR5; 
     EXECUTE STMT1; 
     EXECUTE STMT2; 
     EXECUTE STMT3; 
     EXECUTE STMT4; 
     EXECUTE STMT5; 
     DEALLOCATE PREPARE STMT1;
     DEALLOCATE PREPARE STMT2;
     DEALLOCATE PREPARE STMT3;
     DEALLOCATE PREPARE STMT4;
     DEALLOCATE PREPARE STMT5;
    # SELECT @SQLSTR;
     
  UNTIL 0 END REPEAT;
  #封閉游標
  CLOSE cur_FountTable;

END $$
DELIMITER ;


CALL FountTable();

這裡有幾個細節:

  • 在聲明游標的時刻記得修正本身須要查詢的前提
  • 在預處置這裡也須要改成對應的字段
  • 在界說前提變量的時刻這裡我應用的是EXIT就是碰到毛病就中止,固然也能夠應用CONTINUE 。 

留意:因為mysql在存儲進程傍邊沒法將查詢出來的變量名直接作為表名來用,所以這裡要用到靜態拼接SQL的辦法,然則平日的SET CONCAT的辦法其實不管用,所以這裡就應用了PREPARE來停止預編譯。

 總結

 批量處置固然有時刻能進步任務的效力,然則帶來的潛伏風險也是挺年夜了,所以在履行之前必需要異常有掌握你履行的語句對數據的影響,不然在生成情況就異常風險了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved