1.概念:
存儲過程(Stored Procedure)是一組爲了完成特定功能的SQL 語句集,經編譯後存儲在數據庫。中用戶經過指定存儲過程的名字並給出參數(若是該存儲過程帶有參數)來執行它
2. 建立存儲過程
create procedure sp_name()
3. 調用存儲過程
call sp_name() 存儲過程名稱後面必須加括號,哪怕該存儲過程沒有參數傳遞
4. 刪除存儲過程
drop procedure sp_name 不能在一個存儲過程當中刪除另外一個存儲過程,只能調用另外一個存儲過程
5. 其餘經常使用命令
show procedure status 顯示數據庫中全部的存儲過程的:基本信息 show create procedure sp_name 顯示某一個MySQL存儲過程的詳細信息
--------------------數據類型及運算符--------------------前端
1. 基本數據類型
基本數據類型和其餘語言的及其類似,
具體參考 基本數據類型mysql
2. 變量
自定義變量:DECLARE a INT ; SET a=100; DECLARE a INT DEFAULT 100; 變量分爲用戶變量和系統變量,系統變量又分爲會話和全局級變量 用戶變量:用戶變量名通常以@開頭 在mysql客戶端使用用戶變量 SELECT 'Hello World' into [@x](https://my.oschina.net/u/90035); SELECT [@x](https://my.oschina.net/u/90035); 在存儲過程當中使用用戶變量 CREATE PROCEDURE GreetWorld( ) SELECT CONCAT([@greeting](https://my.oschina.net/u/782404),' World'); SET @greeting='Hello'; CALL GreetWorld( ); 在存儲過程間傳遞全局範圍的用戶變量 CREATE PROCEDURE p1( ) SET @last_procedure='p1'; CREATE PROCEDURE p2( ) SELECT CONCAT('Last procedure was ',@last_procedure); CALL p1( ); CALL p2( );
3. 運算符
- 算術運算符 + - * / div(整除) %
- 比較運算符 < > = <= >= <=> between NOT BETWEEN in not in like regexp(正則表達式) IS NULL IS NOT NULL
- 邏輯運算符
- 位運算符 | & << >> ~ 5.註釋 雙橫槓:-- c風格:/* 註釋內容 */ 通常用於多行註釋 --------------------流程控制--------------------
1. 順序結構
2. 分支結構
if case
3. 循環結構
for循環 while循環 loop循環 repeat until循環 區塊定義,經常使用 begin ...... end; 也能夠給區塊起別名 lable:begin ...... end lable; 跳出區塊 leave lable begin和end如同C語言中的{ 和 }
--------------------輸入和輸出--------------------正則表達式
IN 輸入參數 表示該參數的值必須在調用存儲過程時指定,在存儲過程當中修改該參數的值不能被返回,爲默認值 OUT 輸出參數 該值可在存儲過程內部被改變,並可返回 INOUT 輸入輸出參數 調用時指定,而且可被改變和返回
IN參數例子:(p_in的值不會改變) CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT): BEGIN SELECT p_in; --查詢輸入參數 SET p_in=2; --修改 select p_in;--查看修改後的值 END; OUT參數例子:(p_out的值會改變) CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT): BEGIN SELECT p_out;--查看輸出參數 SET p_out=2;--修改參數值 SELECT p_out;--看看有否變化 END; INOUT參數例子: CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT): BEGIN SELECT p_inout; SET p_inout=2; SELECT p_inout; END; --------------------函數庫--------------------sql
1. 字符串類
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個字符,
2. 數值類型
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爲小數位數
3. 日期類型
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) //分