六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

詳細(xì)講解mysql的存儲過程、游標(biāo) 、事務(wù)

[摘要]本文主要介紹了mysql的存儲過程、游標(biāo) 、事務(wù)實例詳解的相關(guān)資料,這里舉實例說明MySQL 存儲過程與游標(biāo)和事務(wù),需要的朋友可以參考下,希望能幫助到大家。mysql的存儲過程、游標(biāo) 、事務(wù)實例詳解...
本文主要介紹了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 ;

相關(guān)推薦:

MySQL存儲過程和事務(wù)的簡單介紹

存儲過程的定義、修改和刪除的操作方法

MySQL存儲過程 游標(biāo) 錯誤處理的示例代碼

以上就是詳細(xì)講解mysql的存儲過程、游標(biāo) 、事務(wù)的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 青娱乐激情 | 青青青国产在线手机免费观看 | 天天爱天天干天天操 | 亚洲欧美日韩在线2020 | 欧美视频中文字幕 | 日本vs欧美一区二区三区 | 天啪天天天天拍天天碰 | 日本人的一区二区三区四区 | 亚洲二区在线 | 日本黄又粗暴一进一出抽搐文 | 青青草精品在线视频 | 日韩精品免费看 | 日韩精品网 | 午夜色a大片在线观看免费 午夜骚片 | 深夜福利免费视频 | 亚洲无线视频 | 亚洲第一视频网站 | 青青国产在线播放 | 三级理论手机在线观看视频 | 亚洲精品第1页 | 日本欧洲亚洲一区在线观看 | 亚洲自偷自偷图片在线高清 | 在线视频一区二区 | 色噜噜狠狠成人中文小说 | 亚洲精品在线观看91 | 日韩高清成人毛片不卡 | 日日干日日 | 在线 色| 一区小说二区另类小说三区图 | 日日夜夜综合网 | 特级黄色淫片 | 伊人9| 又粗又硬又爽的三级视频在线观看 | 亚洲福利| 亚洲国产高清在线 | 中文字幕亚洲第一 | 青娱乐国产视频 | 日本高清免费中文在线看 | 中文字幕波多野不卡一区 | 青草草视频在线观看 | 中文字幕在线有码高清视频 |