優點:
v 提高安全性
v 簡化mysql查詢
v 減輕帶寬負擔
缺點:
v 增加伺服器負擔
v 對我們開發者來說,難度大一點
php中的函數
function funname(參數){
//函數體
return
}
對于mysql,如果有傳回值的存儲程式,我們就稱其為存儲函數,
沒有傳回值的存儲程式,我們就稱其為存儲過程。
下面主要是按存儲過程來講解
1.0快速案例:
delimiter $
//代碼塊
end $
#調用存儲過程
call show_times();
#檢視存儲過程
show procedure status
#檢視建立存儲過程
show create procedure show_times;
#删除存儲過程
drop procedure show_times;
1.1聲明分隔符
delimiter是分割符的意思,因為mysql預設以";"為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成sql語句進行處理,則存儲過程的編譯過程會報錯,是以要事先用delimiter關鍵字申明目前段分隔符,這樣mysql才會将";"當做存儲過程中的代碼,不會執行這些代碼,用完了之後要把分隔符還原。$,$$,//
1.2參數
mysql存儲過程的參數定義,共有三種參數類型,in,out,inout,形式如:procedure(過程)
create procedure([[in |out |inout ] 參數名 資料類形...])
in 輸入參數:表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被傳回,為預設值
in n int <=> n int
out 輸出參數:該值可在存儲過程内部被改變,并可傳回
inout 輸入輸出參數:調用時指定,并且可被改變和傳回
i 儲存程式變量:
declare variable_name [,variable_name...] datatype [default value];
其中,datatype為mysql的資料類型,如:int, float, date, varchar(length)
例如:
declare l_int int unsigned default 4000000;
declare l_numeric number(8,2) default 9.95;
declare l_date date default '1999-12-31';
declare l_varchar varchar(255) default 'this will not be padded';
Ⅱ. 變量指派
set 變量名 = 表達式值 [,variable_name = expression ...]
set不能忘記
1.3#寫一個生産随機字元串的存儲過程
要求:根據給定的個數,然後輸出一個随機的字元串
學習存儲過程有何用?
1. 了解存儲程式的機制。
2. 看得懂别人寫好的存儲程式。
3. 會寫基本的存儲程式。
4. 引出mysql自帶的函數。
mysql本身已經封裝好了大量的一些存儲程式,我們在開發的時候可以直接拿來使用。
mysql字元串函數
charset(str) //傳回字串字元集
concat (string2 [,... ]) //連接配接字串
instr (string ,substring ) //傳回substring首次在string中出現的位置,不存在傳回0
lcase (string2 ) //轉換成小寫
left (string2 ,length ) //從string2中的左邊起取length個字元
length (string ) //string長度
load_file (file_name ) //從檔案讀取内容
locate (substring , string [,start_position ] ) 同instr,但可指定開始位置
lpad (string2 ,length ,pad ) //重複用pad加在string開頭,直到字串長度為length
ltrim (string2 ) //去除前端空格
repeat (string2 ,count ) //重複count次
replace (str ,search_str ,replace_str ) //在str中用replace_str替換search_str
rpad (string2 ,length ,pad) //在str後用pad補充,直到長度為length
rtrim (string2 ) //去除後端空格
strcmp (string1 ,string2 ) //逐字元比較兩字串大小,
substring (str , position [,length ]) //從str的position開始,取length個字元,
注:mysql中處理字元串時,預設第一個字元下标為1,即參數position必須大于等于1
mysql> select substring('abcd',0,2);
+-----------------------+
| substring('abcd',0,2) |
1 row in set (0.00 sec)
mysql> select substring('abcd',1,2);
| substring('abcd',1,2) |
| ab |
1 row in set (0.02 sec)
trim([[both|leading|trailing] [padding] from]string2) //去除指定位置的指定字元
ucase (string2 ) //轉換成大寫
right(string2,length) //取string2最後length個字元
space(count) //生成count個空格
數學類
abs (number2 ) //絕對值
bin (decimal_number ) //十進制轉二進制
ceiling (number2 ) //向上取整
conv(number2,from_base,to_base) //進制轉換
floor (number2 ) //向下取整
format (number,decimal_places ) //保留小數位數
hex (decimalnumber ) //轉十六進制
注:hex()中可傳入字元串,則傳回其asc-11碼,如hex('def')傳回4142143
也可以傳入十進制整數,傳回其十六進制編碼,如hex(25)傳回19
least (number , number2 [,..]) //求最小值
mod (numerator ,denominator ) //求餘
power (number ,power ) //求指數
rand([seed]) //随機數
round (number [,decimals ]) //四舍五入,decimals為小數位數]
sqrt(number2) //開平方
日期時間類
addtime (date2 ,time_interval ) //将time_interval加到date2
convert_tz (datetime2 ,fromtz ,totz ) //轉換時區
current_date ( ) //目前日期
current_time ( ) //目前時間
current_timestamp ( ) //目前時間戳
date (datetime ) //傳回datetime的日期部分
date_add (date2 , interval d_value d_type ) //在date2中加上日期或時間
date_format (datetime ,formatcodes ) //使用formatcodes格式顯示datetime
date_sub (date2 , interval d_value d_type ) //在date2上減去一個時間
datediff (date1 ,date2 ) //兩個日期差
day (date ) //傳回日期的天
dayname (date ) //英文星期
dayofweek (date ) //星期(1-7) ,1為星期天
dayofyear (date ) //一年中的第幾天
extract (interval_name from date ) //從date中提取日期的指定部分
makedate (year ,day ) //給出年及年中的第幾天,生成日期串
maketime (hour ,minute ,second ) //生成時間串
monthname (date ) //英文月份名
now ( ) //目前時間
sec_to_time (seconds ) //秒數轉成時間
str_to_date (string ,format ) //字串轉成時間,以format格式顯示
timediff (datetime1 ,datetime2 ) //兩個時間差
time_to_sec (time ) //時間轉秒數]
week (date_time [,start_of_week ]) //第幾周
year (datetime ) //年份
dayofmonth(datetime) //月的第幾天
hour(datetime) //小時
last_day(date) //date的月的最後日期
microsecond(datetime) //微秒
month(datetime) //月
minute(datetime) //分傳回符号,正負或0
http://www.php100.com/html/webkaifa/database/mysql/2013/0316/12224.html