mysql 存储过程(我自己写的第一个存储过程,支持事务管理)2
2011-08-30 17:31
585 查看
自己写的第一个存储过程(procedure),写的还算是比较顺利,在此要多些baidu的帮助,呵呵!
该存储过程支持事务处理,好像在baidu上查看时,发现有些表在创建时声明表类型是InnoDB的表,才支持事务。
好了,将这个小demo公布如下,供以后参考:
该存储过程支持事务处理,好像在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;
相关文章推荐
- mysql 存储过程(支持事务管理)
- 发布NBearLite v1.0.0 beta - 全面支持SqlServer,Oracle,MySql,PostgreSql数据库存储过程调用代码生成(C#/VB.NET)
- 该伙伴事务管理器已经禁止了它对远程/网络事务的支持
- MySQL 事务管理
- 该伙伴事务管理器已经禁止了它对远程/网络事务的支持
- Spring对事务管理支持的发展历程
- Spring总结4—对持久层的支持(附:事务管理)
- Mysql | 事务&存储过程
- MySQL&nbsp;XA&nbsp;事务支持调研
- PHP简单mysql管理工具,支持执行多条mysql语句!
- MySQL存储过程之事务管理
- MySQL不支持事务处理的解决方法
- C#编写一个支持Mysql,Acces,SQL数据库类(支持存储过程)
- MySQL中事务管理
- TransactionScope异常:该伙伴事务管理器已经禁止了它对远程/网络事务的支持
- 让Mysql支持事务处理
- MySQL高级五——存储过程的管理
- Spring支持的事务管理类型有什么?
- MySQL存储过程之事务管理
- 该事务管理器已经禁止了它对远程/网络事务的支持