在Mysql存儲進程中應用事務虛例。本站提示廣大學習愛好者:(在Mysql存儲進程中應用事務虛例)文章只能為提供參考,不一定能成為您想要的結果。以下是在Mysql存儲進程中應用事務虛例正文
CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter1 int)
BEGIN
#Routine body goes here...
DECLARE flag int DEFAULT parameter1;#聲明變量flag,將參數值賦給該變量
DECLARE uuidStr VARCHAR(32);#聲明一個長度為32位的字符串
DECLARE currentTime TIMESTAMP;#聲明一個類型為時光戳的變量
declare err INT default 0;#聲明一個整形變量err,默許值是0
declare continue handler for sqlexception set err=1;#當sqlexception handler捕獲到異常時,設置err=1
START TRANSACTION;#開端事務
WHILE flag>0 DO #留意: while不克不及空完成(在while塊中,外面必需有語句)
#uuid()函數獲得的字符串是'6ccd780c-baba-1026-9564-0040f4311e29',剔除外面的-,獲得一個32位的字符串
SET uuidStr = REPLACE(UUID(),'-','') ;
#獲得以後的時光
SET currentTime = CURRENT_TIMESTAMP();
#履行拔出語句,留意銜接字符串的函數concat(str1,str2,...);個中str..也能夠是數字類型
INSERT INTO
表稱號
(id,title,keyword,hasImage,isTodayHead,isShowInHome,isBigness,publishTime,originId,modify_time,isAnalysis)
VALUE
(uuidStr,CONCAT('事宜題目',flag),CONCAT('症結字',flag),1,1,0,0,currentTime,CONCAT('xxxxxxx',flag),currentTime,1);
#每輪回一次,flag要減去1,留意沒有flag--的語法
set flag = flag-1;
#在這裡測試當err=1時,事務能否有了回滾,測試ok
#IF flag=7 THEN #留意在procedure中給變量賦值要用到set,或在變量聲明時用default來父子,所以=號可以用來比擬雙方的值能否相等,<=>也可,差別先不去糾結。
#set err=1;
#END if;
END WHILE;
IF (err=0) THEN
commit;
select 'OK';
ELSE
rollback;
select 'err';
END IF;
END;