-- 預設為off ,等價於 0
-- 開啟binlog日誌記錄時,是否信任 建立函式
-- 預設情況下,為了防止主機和從機中定義的函式不一致,不允許使用者自定義函式
-- 如果希望自定義函式,必須將 log_bin_trust_function_creators=on(1)
show variables like
'%log_bin_trust_function_creators%'
setglobal log_bin_trust_function_creators=
1;
在mysql中定義乙個函式:
定義乙個乙個名為 rand_num的函式,接收兩個int型別的引數,返回乙個長度不超過11位的int型別的結果!
返回 [from_num, to_num]的乙個隨機值!
-- /* 注釋 */
-- /*!versioncode ***x */ 當前資料庫的版本號 >=versioncode,就執行***,否則不執行
-- 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
;
mysql定義過程 定義MySql儲存過程
建立乙個不帶返回值的儲存過程 delimiter drop procedure if exists proc name create procedureproc name in num1 int,in num2 int begin set a 2000000001 set d 20000001 se...
mysql 過程和函式 MySQL 儲存過程和函式
變數 系統變數 變數由系統提供,不是使用者自定義的,屬於伺服器層面 全域性變數 會話變數 如果是全域性級別,則需要加global,如果是會話級別,則需要加session,如果不寫,則預設是會話 檢視全域性變數 show global variables show global variablesli...
MySQL儲存過程和儲存函式
儲存過程和儲存函式 mysql的儲存過程 stored procedure 和函式 stored function 統稱為stored routines。1.儲存過程和函式的區別 函式只能通過return語句返回單個值或者表物件。而儲存過程不允許執行return,但是通過out引數返回多個值。函式是...