国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL使用游標批量處理進行表操作

MySQL使用游標批量處理進行表操作

2020-06-02 15:08pursuer.chen Mysql

這篇文章主要介紹了MySQL使用游標批量進行表操作,包括批量添加索引、批量添加字段等,感興趣的小伙伴們可以參考一下

一、概述

本章節介紹使用游標來批量進行表操作,包括批量添加索引、批量添加字段等。如果對存儲過程、變量定義、預處理還不是很熟悉先閱讀我前面寫過的關于這三個概念的文章,只有先了解了這三個概念才能更好的理解這篇文章。

二、正文

1、聲明光標

?
1
DECLARE cursor_name CURSOR FOR select_statement

這個語句聲明一個光標。也可以在子程序中定義多個光標,但是一個塊中的每一個光標必須有唯一的名字。

注意:SELECT語句不能有INTO子句。

2、打開光標

?
1
DECLARE cursor_name CURSOR FOR select_statement

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

3、前進光標

?
1
FETCH cursor_name INTO var_name [, var_name] ...

這個語句用指定的打開光標讀取下一行(如果有下一行的話),并且前進光標指針。

4、關閉光標

?
1
CLOSE cursor_name

這個語句關閉先前打開的光標。

 5、批量添加索引

共享一個批量添加索引的游標,當一個庫中有上百張表結構一樣但是名稱不一樣的表,這個時候批量操作就變得簡單了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#刪除創建存儲過程
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來進行預編譯。

 總結

 批量處理雖然有時候能提高工作的效率,但是帶來的潛在危險也是挺大了,所以在執行之前必須要非常有把握你執行的語句對數據的影響,否則在生成環境就非常危險了。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲福利二区 | 成人国产在线视频 | 日韩手机在线 | 欧美精品久久久久 | 成年人免费网站 | 亚洲欧美在线视频 | 久久国产亚洲精品 | 精品亚洲一区二区 | 老牛嫩草一区二区三区眼镜 | 黄色在线 | 久草久| 成人一级片 | 国产98色在线 | 日韩 | 色播开心网 | 91精品国产综合久久久久久丝袜 | 久久精品国产一区 | 亚洲精品久久久久久久久久久 | 欧美片网站免费 | 精品久久久久久久久久久下田 | 中文字幕免费视频 | 久久久精品综合 | 青草精品 | 国产一区二区三区在线 | 成人国产电影 | 夜夜操比 | 国产综合精品 | 精品伊人| 亚洲精品成人av | 五月婷婷综合网 | 日韩爱爱免费视频 | 国产毛片一区二区 | 欧美在线观看视频一区二区 | 亚洲精品中文字幕在线观看 | 日本久久久久久久久久久久 | 免费观看av| 亚洲欧美日韩在线 | 亚洲激情一区二区三区 | 午夜精品久久久久久久久 | 欧美一级片在线 | 毛片视频网站在线观看 | 亚洲一区二区在线播放 |