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的存储过程
存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
MySQL存储过程的创建
(1). 格式
MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]])
[特性 ...] 过程体
这里先举个例子:
mysql> DELIMITER //
mysql> CREATE PROCEDURE proc1(OUT s int)
-> BEGIN
-> SELECT COUNT(*) INTO s FROM user
-> END
-> //
mysql> DELIMITER
注:
(1)这里需要注意的是DELIMITER //和DELIMITER 两句,DELIMITER是分割符的意思,因为MySQL默认以""为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将""当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
(2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
(3)过程体的开始与结束使用BEGIN与END进行标识。
本文实例讲述了MySQL实现创建存储过程并循环添加记录的方法。分享给大家供大家参考,具体如下:先创建,然后调用:
--
创建存储过程
DELIMITER//
create
procedure
myproc()
begin
declare
num
int
set
num=1
while
num
<=
24
do
insert
into
t_calendar_hour(hourlist)
values(num)
set
num=num+1
end
while
commit
end//
--
调用存储过程
CALL
myproc()
PS:这里再为大家推荐2款常用的sql在线工具供大家参考使用(包含SQL语句用法说明):
SQL在线压缩/格式化工具:
http://tools.jb51.net/code/sql_format_compress
SQL代码在线格式化美化工具:
http://tools.jb51.net/code/sqlcodeformat
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL存储过程技巧大全》、《MySQL常用函数大汇总》、《MySQL日志 *** 作技巧大全》、《MySQL事务 *** 作技巧汇总》及《MySQL数据库锁相关技巧汇总》
希望本文所述对大家MySQL数据库计有所帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)