Sql存儲過程

1. 存儲過程

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. 運算符

  1. 算術運算符 + - * / div(整除) %
  2. 比較運算符 < > = <= >= <=> between NOT BETWEEN in not in like regexp(正則表達式) IS NULL IS NOT NULL
  3. 邏輯運算符
  4. 位運算符 | & << >> ~ 5.註釋 雙橫槓:-- c風格:/* 註釋內容 */ 通常用於多行註釋 --------------------流程控制--------------------

1. 順序結構

2. 分支結構

if
    case

3. 循環結構

for循環
    while循環
    loop循環
    repeat until循環
    區塊定義,經常使用
        begin
                ......
        end;
    也能夠給區塊起別名
        lable:begin
                ......
        end lable;
    跳出區塊
        leave lable
    begin和end如同C語言中的{ 和 }

--------------------輸入和輸出--------------------正則表達式

mysql存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT

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) //分
相關文章
相關標籤/搜索