Mysql運算符和函數
字符函數
刪除指定字符串
刪除前指定字符串
刪除後續的
刪除前後的
字符串替換
截取字符串,mysql中字符從1開始
查詢包含%的字串
_下劃線代表任意一個字符
數值運算符和函數
日期時間函數
日期格式化
SELECT DATE_FORMAT('2014-3-2','%m/%d/%Y');
信息函數
聚合函數
加密函數
自定義函數(UDF,user-defined function)
CREATE FUNCTION function_name
RETURNS
{STRING | INTEGER | REAL | DECIMAL}
Routine_body
關於函數體
1. 函數體由合法的SQL語句組成;
2. 函數體可以是簡單的SELECT或INSERT語句;
3. 函數體如果爲複合結構則使用BEGIN … END 語句;
4. 複合結構可以包含聲明,循環,控制結構;
例1:創建不帶參數的自定義函數(格式化當前日期)
CREATE FUNCTION f1()
RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H點:%i分:%s秒');
例2: 創建帶有參數的函數(求兩個數的平均值)
CREATE FUNCTION f2(num1 SMALLINTUNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN (num1+num2)/2;
例3:創建具有複合結構函數體的自定義函數(向數據表插入一條數據)複合結構的函數體要包含在BEGIN END 中間
Tip : DELIMITER // 設置mysql的結束符,這裏設置爲兩條斜線結束。
CREATE FUNCTION addpname(pname VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT province(pname) VALUES(pname);
RETURN LAST_INSERT_ID();
END
//
刪除函數
DROP FUNCTION [IFEXISTS] function_name
存儲過程
SQL命令 –》MySQL引擎分析-》語法正確-》執行可識別命令-》執行結果-》客戶端
存儲過程是SQL語句與控制語句的預編譯集合(只在第一次編譯),以一個名稱存儲並作爲一個單元處理。
1. 增強了SQL語句的功能和靈活性
2. 實現了較快的速度。
3. 減少了網絡流量。
創建存儲過程
CREATE
[DEFINED = {user| CURRENT_USER}]
PROCEDUREsp_name([proc_parameter[,…]])
[characteristic …]routine_body
Proc_parameter:
[IN | OUT |INOUT] param_name type
參數
IN,表示該參數的值必須在調用存儲過程時指定。
OUT,表示該參數的值可以被存儲過程改變,並且可以返回。
INOUT,表示該參數調用時指定,並且可以被改變和返回。
過程體
過程體由合法的SQL語句構成。
過程體可以是任意SQL語句。
過程體如果爲複合結構則使用BEGIN…END 語句。
複合結構可以包含聲明,循環,控制結構。
例1:創建不帶參數的存儲過程
CREATE PROCEDURE sql()
SELECT VERSION();
例2:帶有IN 類型參數的存儲過程
CREATE PROCEDUREremoveById(IN p_id INT UNSIGNED)
BEGIN
DELETE FROMprovince WHERE id = p_id;
END
//
刪除存儲過程
DROP PROCEDUREprocedure_name
例3:創建帶有IN 和OUT 類型的參數的存儲過程
這個存儲過程可以刪除指定id的數據並且返回剩下的總數
CREATE PROCEDUREremoveUserAndReturnUserNums(
IN p_id INTUNSIGNED ,OUT userNums INT UNSIGNED)
BEGIN
DELETE FROMcounty WHERE id=p_id;
SELECT count(id)FROM county INTO userNums;
END
//
1. 用戶變量:以"@"開始,形式爲"@變量名"
用戶變量跟mysql客戶端是綁定的,設置的變量,只對當前用戶使用的客戶端生
2. 全局變量:定義時,以如下兩種形式出現,set GLOBAL
變量名
或者 set @@global.變量名
對所有客戶端生效。只有具有super權限纔可以設置全局變量
3. 會話變量:只對連接的客戶端有效。
4. 局部變量:作用範圍在begin到end語句塊之間。在該語句塊裏設置的變量
declare語句專門用於定義局部變量。set語句是設置不同類型的變量,包括會話變量和全局變量
例4:創建帶有多個OUT類型參數的存儲過程
ROW_COUNT(); 增加或刪除的數量表示最後一次操作的數量
刪除一個表的數據,並返回刪除了幾條,還剩下幾條數據。
CREATE PROCEDURE removeUserByAgeAndReturnInfos(
IN p_age SMALLINT,
OUT deleteUsers SMALLINT UNSIGNED,
OUT userCounts SMALLINT UNSIGNED)
BEGIN
DELETE FROM user WHEREage=p_age;
SELECT ROW_COUNT() INTO deleteUsers;
SELECT COUNT(id) FROM user INTO userCounts;
END
//
存儲過程與自定義函數的區別
1. 存儲過程實現的功能要複雜一些;而函數的針對性更強。
2. 存儲過程可以返回多個值;函數只能有一個返回值。
3. 存儲過程一般獨立的來執行;而函數可以作爲其他SQL語句的組成部分來出現。