mysql 存储过程(我自己写的第一个存储过程,支持事务管理)2

自己写的第一个存储过程(procedure),写的还算是比较顺利,在此要多些baidu的帮助,呵呵!


该存储过程支持事务处理,好像在baidu上查看时,发现有些表在创建时声明表类型是InnoDB的表,才支持事务。


好了,将这个小demo公布如下,供以后参考:


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;


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值