MySQL定义函数和存储过程

MySQL定义函数和存储过程

-- 默认为off ,等价于 0 
-- 开启binlog日志记录时,是否信任 创建函数 
-- 默认情况下,为了防止主机和从机中定义的函数不一致,不允许用户自定义函数
-- 如果希望自定义函数,必须将 log_bin_trust_function_creators=on(1)
SHOW	VARIABLES LIKE '%log_bin_trust_function_creators%'

set global log_bin_trust_function_creators=1;

在mysql中定义一个函数:

定义一个一个名为 rand_num的函数,接收两个int类型的参数,返回一个长度不超过11位的int类型的结果!

返回 [from_num, to_num]的一个随机值!

--  /* 注释 */ 
-- /*!versioncode  xxxx */  当前数据库的版本号 >=versioncode,就执行xxx,否则不执行
-- 50003 等价于 mysql 5.003版本
/*!50003 DROP FUNCTION IF EXISTS `rand_num` */;

SELECT VERSION()

--指定sql语句结束的分隔符,指定$$是一条sql语句的结尾 ,默认;
DELIMITER $$

-- 函数定义的语法:CREATE FUNCTION 函数名(参数列表) RETURNS 返回值类型  BEGIN 函数体 END
/*!50003 

-- 
CREATE DEFINER=`root`@`localhost` FUNCTION `rand_num`(from_num INT ,to_num INT) RETURNS int(11)
BEGIN   
-- 声明一个局部变量i,int类型,默认初始值0
 DECLARE i INT DEFAULT 0;  
 
 -- 改变i的值
 SET i = FLOOR(from_num +RAND()*(to_num -from_num+1))   ;
 
 --返回 i 
RETURN i;  

 END 
 
 */$$
DELIMITER ;

存储过程,没有返回值,函数有返回值!

定义一个名为 init_data的存储过程,接收四个参数:

(do_date_string VARCHAR(20),order_incr_num INT,user_incr_num INT,if_truncate BOOLEAN)

do_date_string : 存储过程调用的日期

order_incr_num : 新增多少条订单

user_incr_num : 新增多少个用户

if_truncate: 是否先清空表,再插入!

​ true,会先清空表,再插入

​ false: 不清空表

/*!50003 DROP PROCEDURE IF EXISTS  `init_data` */;

DELIMITER $$

--  CREATE  PROCEDURE 存储过程名(参数列表)  BEGIN 存储过程体 END
/*!50003 

CREATE DEFINER=`root`@`localhost` PROCEDURE `init_data`(do_date_string VARCHAR(20),order_incr_num INT,user_incr_num INT,if_truncate BOOLEAN)
BEGIN  
	-- 声明三个变量
     DECLARE user_count INT DEFAULT 0; 
     DECLARE sku_count INT DEFAULT 0; 
     DECLARE do_date VARCHAR(20) DEFAULT do_date_string;
     
     -- IF 和 END IF 等价于  if(){}
     -- 如果if_truncate是true,先清空以下四张表
     IF if_truncate THEN 
        TRUNCATE TABLE order_info ;
        TRUNCATE TABLE order_detail ;
        TRUNCATE TABLE user_info ;
        TRUNCATE TABLE payment_info;
     END IF;
     
     -- 如果user_incr_num 不为0 , 调用insert_user存储过程
     IF user_incr_num != 0 THEN
     -- insert_user 会在do_date日期下,新增 user_incr_num个数量的用户
     CALL insert_user(do_date,user_incr_num);
     END IF;
     
     -- 先运行   SELECT COUNT(*) FROM  user_info,再将结果赋值给 user_count变量!
     SELECT COUNT(*) INTO user_count FROM  user_info;
     
     -- 调用更新order表,插入订单,插入支付数据三个存储过程
     CALL update_order(do_date);
     CALL insert_order(do_date,order_incr_num,user_count);
     CALL insert_payment(do_date);
 END */$$
 
DELIMITER ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值