天天看點

mysql儲存函過程和儲存函數都屬于存儲程式

優點:

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