最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL使用游標(biāo)批量處理進(jìn)行表操作

 更新時(shí)間:2016年03月23日 14:47:39   作者:pursuer.chen  
這篇文章主要介紹了MySQL使用游標(biāo)批量進(jìn)行表操作,包括批量添加索引、批量添加字段等,感興趣的小伙伴們可以參考一下

一、概述

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

理解MySQL變量和條件:http://www.fzitv.net/article/81375.htm

理解Mysql prepare預(yù)處理語句:http://www.fzitv.net/article/81378.htm

理解MySQL存儲(chǔ)過程和函數(shù):http://www.fzitv.net/article/81381.htm

二、正文

1、聲明光標(biāo)

DECLARE cursor_name CURSOR FOR select_statement

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

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

2、打開光標(biāo)

DECLARE cursor_name CURSOR FOR select_statement

這個(gè)語句打開先前聲明的光標(biāo)。

3、前進(jìn)光標(biāo)

FETCH cursor_name INTO var_name [, var_name] ...

這個(gè)語句用指定的打開光標(biāo)讀取下一行(如果有下一行的話),并且前進(jìn)光標(biāo)指針。

4、關(guān)閉光標(biāo)

CLOSE cursor_name

這個(gè)語句關(guān)閉先前打開的光標(biāo)。

 5、批量添加索引

共享一個(gè)批量添加索引的游標(biāo),當(dāng)一個(gè)庫中有上百張表結(jié)構(gòu)一樣但是名稱不一樣的表,這個(gè)時(shí)候批量操作就變得簡單了。

#刪除創(chuàng)建存儲(chǔ)過程
DROP PROCEDURE IF EXISTS FountTable;
DELIMITER $$
CREATE PROCEDURE FountTable()
BEGIN
  DECLARE TableName varchar(64); 
  #聲明游標(biāo)
  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;
  #打開游標(biāo)
  OPEN cur_FountTable;
  REPEAT
     FETCH cur_FountTable INTO TableName;
     #定義預(yù)處理
     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;
  #關(guān)閉游標(biāo)
  CLOSE cur_FountTable;

END $$
DELIMITER ;


CALL FountTable();

這里有幾個(gè)細(xì)節(jié):

  • 在聲明游標(biāo)的時(shí)候記得修改自己需要查詢的條件
  • 在預(yù)處理這里也需要改成對(duì)應(yīng)的字段
  • 在定義條件變量的時(shí)候這里我使用的是EXIT就是遇到錯(cuò)誤就中斷,當(dāng)然也可以使用CONTINUE 。 

注意:由于mysql在存儲(chǔ)過程當(dāng)中無法將查詢出來的變量名直接作為表名來用,所以這里要用到動(dòng)態(tài)拼接SQL的方法,但是通常的SET CONCAT的方法并不管用,所以這里就使用了PREPARE來進(jìn)行預(yù)編譯。

 總結(jié)

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

相關(guān)文章

  • Mysql 根據(jù)一個(gè)表數(shù)據(jù)更新另一個(gè)表的某些字段(sql語句)

    Mysql 根據(jù)一個(gè)表數(shù)據(jù)更新另一個(gè)表的某些字段(sql語句)

    這篇文章主要介紹了Mysql 根據(jù)一個(gè)表數(shù)據(jù)更新另一個(gè)表的某些字段,本文給出了sql語句,感興趣的朋友可以跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Mysql中MyISAM和InnoDB的區(qū)別及說明

    Mysql中MyISAM和InnoDB的區(qū)別及說明

    這篇文章主要介紹了Mysql中MyISAM和InnoDB的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • mysql?8.0.30?降級(jí)到?8.0.27的詳細(xì)步驟

    mysql?8.0.30?降級(jí)到?8.0.27的詳細(xì)步驟

    這篇文章主要介紹了mysql?8.0.30?降級(jí)到?8.0.27,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • MySQL關(guān)于字符串中數(shù)字排序的問題分析

    MySQL關(guān)于字符串中數(shù)字排序的問題分析

    這篇文章主要介紹了MySQL關(guān)于字符串中數(shù)字排序的問題,結(jié)合實(shí)例形式分析了mysql按照數(shù)值排序的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • mysql 5.7.24 安裝配置方法圖文教程

    mysql 5.7.24 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.24 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • mysql中如何按分組添加序號(hào)

    mysql中如何按分組添加序號(hào)

    這篇文章主要介紹了mysql中如何按分組添加序號(hào)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MySQL死鎖檢查處理的正常方法

    MySQL死鎖檢查處理的正常方法

    這篇文章主要給大家介紹了關(guān)于MySQL死鎖檢查處理的正常方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 詳解MySQL中的SQRT函數(shù)的使用方法

    詳解MySQL中的SQRT函數(shù)的使用方法

    這篇文章主要介紹了詳解MySQL中的SQRT函數(shù)的使用方法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • mysql MGR 單主多主模式切換知識(shí)點(diǎn)詳解

    mysql MGR 單主多主模式切換知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家整理了關(guān)于mysql MGR 單主多主模式切換知識(shí)點(diǎn)詳解內(nèi)容,需要的朋友們可以參考下。
    2020-03-03
  • 深入解析MySQL雙寫緩沖區(qū)

    深入解析MySQL雙寫緩沖區(qū)

    雙寫緩沖區(qū)是MySQL中的一種優(yōu)化方式,主要用于提高數(shù)據(jù)的寫性能,本文將介紹Doublewrite Buffer的原理和應(yīng)用,幫助讀者深入理解其如何提高M(jìn)ySQL的數(shù)據(jù)可靠性并防止可能的數(shù)據(jù)損壞,感興趣的可以了解一下
    2024-02-02

最新評(píng)論

天台县| 南华县| 乌拉特中旗| 化州市| 宁安市| 龙江县| 祁门县| 建宁县| 包头市| 凤城市| 大化| 阿坝| 合水县| 门头沟区| 东兰县| 福安市| 康定县| 衢州市| 南郑县| 扶沟县| 丰顺县| 宁晋县| 新乡县| 北辰区| 建瓯市| 陆河县| 莱芜市| 清苑县| 尼木县| 濉溪县| 波密县| 新绛县| 河东区| 武山县| 化德县| 平遥县| 古浪县| 榆树市| 永和县| 吉水县| 永年县|