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

mysql的存儲過程、游標(biāo) 、事務(wù)實例詳解

 更新時間:2017年08月02日 11:48:36   投稿:lqh  
這篇文章主要介紹了mysql的存儲過程、游標(biāo) 、事務(wù)實例詳解的相關(guān)資料,這里舉實例說明MySQL 存儲過程與游標(biāo)和事務(wù),需要的朋友可以參考下

mysql的存儲過程、游標(biāo) 、事務(wù)實例詳解

下面是自己曾經(jīng)編寫過的mysql數(shù)據(jù)庫存儲過程,留作存檔,以后用到的時候拿來參考。

其中,涉及到了存儲過程、游標(biāo)(雙層循環(huán))、事務(wù)。

【說明】:代碼中的注釋只針對當(dāng)時業(yè)務(wù)而言,無須理會。

代碼如下:

DELIMITER $$
DROP PROCEDURE IF EXISTS `transferEmailTempData`$$

CREATE PROCEDURE transferEmailTempData(IN jobId VARCHAR(24))
BEGIN
  DECLARE idval VARCHAR(24) DEFAULT '';
  DECLARE taskIdval VARCHAR(24) DEFAULT '';
  DECLARE groupIdval VARCHAR(24) DEFAULT '';
  DECLARE emailval VARCHAR(50) DEFAULT '';
  
  /*標(biāo)識正式表是否存在一條相同數(shù)據(jù),即:groupId、email相同*/
  DECLARE infoId VARCHAR(24) DEFAULT '';
  
  /*標(biāo)識事務(wù)錯誤*/
  DECLARE err INT DEFAULT 0;
  
  /*達(dá)到一定數(shù)量就進(jìn)行提交,計數(shù)器*/
  DECLARE counts INT DEFAULT 0;
  
  /*標(biāo)識是否回滾過*/
  DECLARE isrollback INT DEFAULT 0;
  
  /*游標(biāo)遍歷時,作為判斷是否遍歷完全部記錄的標(biāo)記*/
  DECLARE done INTEGER DEFAULT 0;
  
  /*獲取臨時表該任務(wù)的數(shù)據(jù)*/
  DECLARE cur CURSOR FOR SELECT id,taskId,groupId,email FROM `t_email_data_temp` WHERE taskId=jobId;
  
  /*根據(jù)群組id、email查詢是否存在相同記錄*/
  DECLARE cur2 CURSOR FOR SELECT id FROM `t_email_info` e WHERE e.`group_id` = groupIdval AND e.`email_address` = emailval; 
  
  /* 出現(xiàn)錯誤,設(shè)置為1,只要發(fā)生異常就回滾*/
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1;
  
  /*聲明當(dāng)游標(biāo)遍歷完全部記錄后將標(biāo)志變量置成某個值*/
  DECLARE CONTINUE HANDLER FOR NOT FOUND
  SET done=1;
  
  /*開啟事務(wù)*/
  START TRANSACTION;
  
  /*打開游標(biāo)*/
  OPEN cur;
  
  /*使用LOOP循環(huán)遍歷*/
  out_loop:LOOP
  
    /*將每一條結(jié)果對應(yīng)的字段值賦值給變量*/
    FETCH cur INTO idval,taskIdval,groupIdval,emailval;
    IF done = 1 THEN
      LEAVE out_loop;
    END IF;
    
    /*打開第二個游標(biāo)*/
    OPEN cur2;
      SET done = 0;
      FETCH cur2 INTO infoId;
      
      /*如果正式表不存在相同groupId and email記錄,添加到正式表*/
      IF done = 1 THEN
      
        /*插入正式表*/
        INSERT INTO `t_email_info` VALUES(idval,emailval,groupIdval,0,'',NOW(),'admin',NOW(),'admin');
        
        /*刪除臨時數(shù)據(jù)*/
        DELETE FROM `t_email_data_temp` WHERE id = idval;
        
        /*計數(shù)器,每1000條才提交*/
        SET counts = counts + 1;
        
        /*發(fā)生異常,回滾*/
        IF err=1 THEN
          SET isrollback=1;
          ROLLBACK;
        ELSE
          IF counts = 1000 THEN
            COMMIT;
            /*達(dá)到1000條提交后,重置計數(shù)器*/
            SET counts=0;
          END IF;
        END IF;
      ELSE
        /*已經(jīng)存在相同記錄,則刪除該記錄*/
        IF done=0 THEN
          DELETE FROM `t_email_data_temp` WHERE id = idval;
        END IF;
      END IF;
      FETCH cur2 INTO infoId;
    CLOSE cur2;
    
    /*控制外部的循環(huán),該步驟不能缺少,否則只循環(huán)一次就結(jié)束了*/
    SET done=0;
    
  END LOOP out_loop;
  CLOSE cur;
  
  /*如果沒有發(fā)生過回滾事件,則更新task狀態(tài)*/
  /*如果回滾過,不更新task狀態(tài),下次執(zhí)行任務(wù)的時候,會再次將剩余沒有提交的數(shù)據(jù)進(jìn)行添加到正式表*/
  IF isrollback=0 THEN
    UPDATE `t_email_task` t SET t.`if_finish` = 1 WHERE t.`id`=jobId;
  END IF;
  
  END$$

DELIMITER ;

以上就是mysql的存儲過程、游標(biāo) 、事務(wù)的講解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • mysql 雙向同步的鍵值沖突問題的解決方法分享

    mysql 雙向同步的鍵值沖突問題的解決方法分享

    多主互備和主從復(fù)制有一些區(qū)別,因為多主中都可以對服務(wù)器有寫權(quán)限,所以設(shè)計到自增長重復(fù)問題
    2011-09-09
  • MySQL中@i:=@i+1表達(dá)式用法詳解

    MySQL中@i:=@i+1表達(dá)式用法詳解

    這篇文章主要給大家介紹了關(guān)于MySQL中@i:=@i+1表達(dá)式用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • php運行提示Can''t connect to MySQL server on ''localhost''的解決方法

    php運行提示Can''t connect to MySQL server on ''localhost''的解決方法

    有些時候我們運行php的時候,頁面提示Can't connect to MySQL server on 'localhost',那么就需要參考下面的方法來解決。
    2011-06-06
  • PHP mysqli擴展庫 預(yù)處理技術(shù)的使用分析

    PHP mysqli擴展庫 預(yù)處理技術(shù)的使用分析

    本篇文章,介紹了PHP mysqli擴展庫 預(yù)處理技術(shù)的使用分析。需要的朋友參考下
    2013-05-05
  • MySQL修改tmpdir參數(shù)

    MySQL修改tmpdir參數(shù)

    本文給大家分享的是在linux系統(tǒng)下MySQL修改tmpdir參數(shù)解決tmpdir報錯的問題,有相同需求的小伙伴可以參考下
    2016-02-02
  • MySQL 查詢某個字段含有字母數(shù)字的值示例詳解

    MySQL 查詢某個字段含有字母數(shù)字的值示例詳解

    在本文中,我們詳細(xì)介紹了如何在 MySQL 中查詢某個字段含有字母和數(shù)字的值,我們首先介紹了正則表達(dá)式的基礎(chǔ)知識,然后通過五個具體示例展示了如何應(yīng)用這些知識,通過這些示例,我們可以看到正則表達(dá)式在處理復(fù)雜字符串模式匹配時的強大功能,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 分享Mysql命令大全

    分享Mysql命令大全

    本文給大家介紹mysql命令大全相關(guān)知識,涉及到mysql命令相關(guān)知識,對此感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Navicat連接mysql報錯2003(10060)的解決方法

    Navicat連接mysql報錯2003(10060)的解決方法

    本來好好的navicat連接數(shù)據(jù)庫,突然間今天就打不開數(shù)據(jù)庫了,下面這篇文章主要給大家介紹了關(guān)于Navicat連接mysql報錯2003(10060)的解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • MySql 5.7.17 winx64的安裝配置詳細(xì)教程

    MySql 5.7.17 winx64的安裝配置詳細(xì)教程

    這篇文章主要介紹了MySql 5.7.17 winx64的安裝配置教程,初始化數(shù)據(jù)庫、配置相關(guān)信息的方法在本文中介紹的非常詳細(xì),需要的朋友參考下
    2017-01-01
  • 淺析mysql 語句的調(diào)度優(yōu)先級及改變

    淺析mysql 語句的調(diào)度優(yōu)先級及改變

    本篇文章是對mysql語句的調(diào)度優(yōu)先級及改變進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評論

南溪县| 东辽县| 邢台县| 突泉县| 根河市| 方城县| 赫章县| 龙游县| 肇庆市| 合水县| 台北县| 禹城市| 云浮市| 商丘市| 个旧市| 兴安盟| 汽车| 怀仁县| 朝阳市| 余姚市| 岳阳市| 潜山县| 郯城县| 昔阳县| 南木林县| 伊金霍洛旗| 阜城县| 凤山市| 五指山市| 林州市| 金塔县| 井冈山市| 象山县| 镇康县| 临高县| 桓仁| 沾化县| 施甸县| 六安市| 珠海市| 英吉沙县|