MySQL儲存過程與函式_gw
MySQL儲存過程與函式
函式
數學函式
abs(x):返回x的絕對值
rand():返回0到1的隨機數(0-0.9999…,1是取不到的)
mod(x,y):返回x除以y以後的餘數
-power(x,y):返回x的y次方
round(x):返回離x最近的整數(四捨五入,只看小數點後第一位)
round(x,y):保留x的y位小數四捨五入後的值
sqrt(x):返回x的平方根
truncate(x,y):返回數字x截斷為y位小數的值
ceil(x):返回大於或等於x的最小整數(向上取整數)
floor(x):返回小於或等於x的最大整數(向下取整數)
greatest(x1,x2…):返回集合中最大的值
least(x1,x2…):返回集合中最小的值
聚合函式
1、對錶中資料記錄進行集中概括而設計的一類函式
2、常用的聚合函式(只會產生一個值)
avg(欄位名) 返回指定欄位的平均值
count(欄位名) 返回指定欄位中非NULL值的個數
min(欄位名) 返回指定欄位的最小值
max(欄位名) 返回指定欄位的最大值
sum(欄位名) 返回指定欄位的所有值之和
字串函式
length(x):返回字串x的長度(空格也算)
trim():返回去除指定格式的值(只能去除前後的空格)
concat(x,y):將提供的引數x和y拼接成一個字串
upper(x):將字串x的所有字母變成大寫字母
lower(x):將字串x的所有字母變成小寫字母
left(x,y):返回字串x的前y個字元
right(x,y):返回字串x的後y個字元
repeat(x,y):將字串x重複y次
space(x):返回x個空格(結合concat使用)
replace(x,y,z):將字串z替代字串x中的字串y
strcmp(x,y):比較x和y,返回的值可以為-1 <,0 =,1 >
substring(x,y,z):獲取從字串x中的第y個位置開始長度為z的字串
格式:substring(完整字串,起始位置,長度); #起始位置從1開始
reverse(x):將字串x反轉
日期時間函式
curdate():返回當前時間的年月日
curtime():返回當前時間的時分秒
now():返回當前時間的日期和時間
month(x):返回日期x中的月份值
hour(x):返回x中的小時值
minute(x):返回x中的分鐘值
second(x):返回x中的秒鐘值
dayofweek(x):返回x是星期幾,1星期日,2星期一,3星期二…
dayofmonth(x):計算日期x是本月的第幾天
dayofyear(x):計算日期x是本年的第幾天
MySQL儲存過程
儲存過程簡介
1、從 5.0 版本才開始支援
2、是一組為了完成特定功能的SQL語句集合(封裝)
3、比傳統SQL速度更快、執行效率更高
4、儲存過程的優點
(1)執行一次後,會將生成的二進位制程式碼駐留緩衝區(便於下次執行),提高執行效率
(2)SQL語句加上控制語句的集合,靈活性高
(3)在伺服器端儲存,客戶端呼叫時,降低網路負載
(4)可多次重複被呼叫,可隨時修改,不影響客戶端呼叫
(5)可完成所有的資料庫操作,也可控制資料庫的資訊訪問許可權
5、為什麼要用儲存過程?
(1)減輕網路負載;
(2)增加安全性
建立儲存過程
1、使用create procedure語句建立儲存過程
2、引數分為
輸入引數:in
輸出引數:out
輸入/輸出引數:inout
3、儲存過程的主體部分,被稱為過程體;以begin開始,以end$$結束
4、具體格式
delimiter $$
create procedure 儲存過程名(in 引數名 引數型別)
begin
#定義變數
declare 變數名 變數型別
#變數賦值
set 變數名 = 值
sql 語句1;
sql 語句2;
...
end$$
delimiter ;(有空格)
舉例:
mysql> delimiter $$
mysql> create procedure test ()
-> begin select * from test;
-> end $$
Query OK, 0 rows affected (0.00 sec)
mysql>
呼叫儲存過程
call 儲存過程名(實際引數);
舉例:
mysql> delimiter ;
mysql> call test;
查詢儲存過程
show procedure status where db=‘資料庫’;
修改儲存過程
儲存過程的修改分為特徵的修改和業務內容的修改。
特徵的修改語法結構如下:
alter procedure 儲存過程名 [ <特徵> … ]
刪除儲存過程
刪除儲存過程的語法:
drop {procedure|function|if exits} <過程名>