在Mysql存储过程中使用事务实例

2023年 4月 23日 36.3k 0

复制代码 代码如下: CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter1 int) BEGIN #Routine body goes here... DECLARE flag int DEFAULT parameter1;#声明变量flag,将参数值赋给该变量 DECLARE uuidStr VAR

复制代码 代码如下: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;

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论