MySQL存儲過程詳解

一、使用了存過程,不少類似性的刪除,更新,新增等操做就變得輕鬆了,而且之後也便於管理!前端

二、存儲過程由於SQL語句已經預編繹過了,所以運行的速度比較快。   mysql

三、存儲過程能夠接受參數、輸出參數、返回單個或多個結果集以及返回值。能夠向程序返回錯誤緣由。     sql

四、存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,之後都會按這個程序運行。     數據庫

五、存儲過程主要是在服務器上運行,減小對客戶機的壓力。   express

六、存儲過程能夠包含程序流、邏輯以及對數據庫的查詢。同時能夠實體封裝和隱藏了數據邏輯。   後端

七、存儲過程能夠在單個存儲過程當中執行一系列SQL語句。   服務器

八、存儲過程能夠從本身的存儲過程內引用其它存儲過程,這能夠簡化一系列複雜語句。ide


一.建立存儲過程函數

1.基本語法:oop

create procedure sp_name()

begin

.........

end


2.參數傳遞


二.調用存儲過程

1.基本語法:call sp_name()

注意:存儲過程名稱後面必須加括號,哪怕該存儲過程沒有參數傳遞


三.刪除存儲過程

1.基本語法:

drop procedure sp_name//

2.注意事項

(1)不能在一個存儲過程當中刪除另外一個存儲過程,只能調用另外一個存儲過程


四.區塊,條件,循環


1.區塊定義,經常使用

begin

......

end;

也能夠給區塊起別名,如:

lable:begin

...........

end lable;

能夠用leave lable;跳出區塊,執行區塊之後的代碼

2.條件語句

if 條件 then

statement

else

statement

end if;


3.循環語句

(1).while循環

[label:] WHILE expression DO


statements


END WHILE [label] ;




(2).loop循環

[label:] LOOP


statements


END LOOP [label];



(3).repeat until循環

[label:] REPEAT


statements


UNTIL expression


END REPEAT [label] ;



五.其餘經常使用命令

1.show procedure status

顯示數據庫中全部存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,建立時間等

2.show create procedure sp_name

顯示某一個存儲過程的詳細信息

mysql存儲過程當中要用到的運算符


mysql存儲過程學習總結-操做符

算術運算符


+     加   SET var1=2+2;       4

-     減   SET var2=3-2;       1

*     乘   SET var3=3*2;       6

/     除   SET var4=10/3;      3.3333

DIV   整除 SET var5=10 DIV 3;  3

%     取模 SET var6=10%3 ;     1


比較運算符



>            大於 1>2 False

<            小於 2<1 False

<=           小於等於 2<=2 True

>=           大於等於 3>=2 True

BETWEEN      在兩值之間 5 BETWEEN 1 AND 10 True

NOT BETWEEN  不在兩值之間 5 NOT BETWEEN 1 AND 10 False

IN           在集合中 5 IN (1,2,3,4) False

NOT IN       不在集合中 5 NOT IN (1,2,3,4) True

=            等於 2=3 False

<>, !=       不等於 2<>3 False

<=>          嚴格比較兩個NULL值是否相等 NULL<=>NULL True

LIKE         簡單模式匹配 "Guy Harrison" LIKE "Guy%" True

REGEXP       正則式匹配 "Guy Harrison" REGEXP "[Gg]reg" False

IS NULL      爲空 0 IS NULL False

IS NOT NULL  不爲空 0 IS NOT NULL True



邏輯運算符


與(AND)






AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

NULL

NULL

NULL

NULL

NULL

或(OR)


OR

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL


異或(XOR)


XOR

TRUE

FALSE

NULL

TRUE

FALSE

TRUE

NULL

FALSE

TRUE

FALSE

NULL

NULL

NULL

NULL

NULL



位運算符


|   位或

&   位與

<<  左移位

>>  右移位

~   位非(單目運算,按位取反)



 


mysq存儲過程當中經常使用的函數,字符串類型操做,數學類,日期時間類。


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爲小數位數]

注:返回類型並不是均爲整數,如:

(1)默認變爲×××值

mysql> select round(1.23);

+-------------+

| round(1.23) |

+-------------+

|           1 |

+-------------+

1 row in set (0.00 sec)


mysql> select round(1.56);

+-------------+

| round(1.56) |

+-------------+

|           2 |

+-------------+

1 row in set (0.00 sec)


(2)能夠設定小數位數,返回浮點型數據

mysql> select round(1.567,2);

+----------------+

| round(1.567,2) |

+----------------+

|           1.57 |

+----------------+

1 row in set (0.00 sec)


SIGN (number2 ) //返回符號,正負或0

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) //分


 

附:可用在INTERVAL中的類型

DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR 

相關文章
相關標籤/搜索