MySQL定義函式和儲存過程

2021-10-19 14:18:02 字數 2795 閱讀 4304

-- 預設為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引數返回多個值。函式是...