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
如果我的回答没能帮助您,请继续追问。
function func($val,$id) {$sql="update table set a=? where id=?"
$pre=$this->pdo->prepare($sql)
$this->pdo->beginTransaction()//开启事务
$bo=$pre->execute(array($val,$id))
if($bo){
//…执行代码……
$this->pdo->commit()//提交事务
return true
}else{
//…执行代码……
$this->pdo->rollBack()//回滚事务
return false
}
}
begin sql1sql2.......commit在commit 中的语句都是事务的一部分,不过如你问题所说数据库管理系统是mysql 所以需要有个问题需要注意存储引擎是INNODB和BDB类型的数据表才支持事务处理。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)