1. 程式人生 > >mysql 儲存過程 (procedure)和常用函式(function)

mysql 儲存過程 (procedure)和常用函式(function)

一, 基本知識

1, 定義

  一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。

2,demo

DELIMITER //
DROP PROCEDURE IF EXISTS `pro_test`// 
CREATE PROCEDURE `pro_test`(IN temp INT, OUT outTest VARCHAR)
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE len INT DEFAULT 100;
    DECLARE `sum` INT DEFAULT 0;
    DECLARE `count` INT DEFAULT 0;

    SELECT
COUNT(*) INTO `count` FROM t_student;
END // DELIMITER ; CALL pro_test(3, @out);
  • DELIMITER:宣告分隔符為 // ,防止被當成sql 語句進行處理;
  • BEGIN, END : 儲存過程開始和結束;
  • IN : 輸入引數, OUT: 輸出引數, INPUT: 輸入輸出引數
  • DECLARE : 宣告變數;
  • into : 將從資料庫查詢的結構放入到引數中

二,條件和迴圈語句

1,條件語句( if code then code else code end if)

: eg:


DELIMITER //
DROP PROCEDURE IF EXISTS `pro_test`// CREATE PROCEDURE `pro_test`(IN temp INT) BEGIN DECLARE i INT DEFAULT 0; DECLARE len INT DEFAULT 100; DECLARE `sum` INT DEFAULT 0; DECLARE `count` INT DEFAULT 0; IF i < len THEN SET `sum` = `sum` + 1; SET i = i + 1; ELSE SET
`sum` = 44; END IF; SELECT COUNT(*) INTO `count` FROM t_student; SELECT i, len, `sum`, `count`; END // DELIMITER ;

2,while 迴圈(while code do code end while)

: eg :

DELIMITER //
DROP PROCEDURE IF EXISTS `pro_test`// 
CREATE PROCEDURE `pro_test`(IN temp INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE len INT DEFAULT 100;
    DECLARE `sum` INT DEFAULT 0;
    DECLARE `count` INT DEFAULT 0;

    WHILE i < 100 DO
        SET `sum` = `sum` + i;
        SET i = i + 1;
    END WHILE;

    SELECT COUNT(*) INTO `count` FROM t_student;
    SELECT i, len, `sum`, `count`;
END //
DELIMITER ;

3,repeat 迴圈(repeat code until code end repeat)

: eg:

DELIMITER //
DROP PROCEDURE IF EXISTS `pro_test`// 
CREATE PROCEDURE `pro_test`(IN temp INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE len INT DEFAULT 100;
    DECLARE `sum` INT DEFAULT 0;
    DECLARE `count` INT DEFAULT 0;

    REPEAT 
        SET `sum` = `sum`+ i;
        SET i = i + 1;
    UNTIL i = 100
    END REPEAT;

    SELECT i, len, `sum`, `count`;
END //
DELIMITER ;

4,loop 迴圈()

: eg:

DELIMITER //
DROP PROCEDURE IF EXISTS `pro_test`// 
CREATE PROCEDURE `pro_test`(IN temp INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE len INT DEFAULT 100;
    DECLARE `sum` INT DEFAULT 0;
    DECLARE `count` INT DEFAULT 0;

    loop_lable:LOOP
        SET `sum` = `sum` + 1;
        SET i = i + 1;
        IF i>=100 THEN
            LEAVE loop_lable;
        END IF;
    END LOOP;

    SELECT i, len, `sum`, `count`;
END //
DELIMITER ;

三,基本函式


-- mysql 常用函式

SELECT CONCAT('連線函式1', '--', '連線函式2');

SELECT LENGTH('位元組長度');

SELECT CHAR_LENGTH('字元長度');

SELECT SUBSTRING('擷取字元長度', 1, 3);

SELECT REPLACE('替換舊字串內容', '舊字串', '新字串');

SELECT REVERSE('反轉字串內容');

SELECT POSITION('一' IN '找到字串第一次出現的位置');

SELECT LOCATE('一', '找到字串第一次出現的位置');

SELECT TRIM(' 移除字串前後的空字串 ');

SELECT CURRENT_TIMESTAMP(); -- 當前的時間

字元函式

函式名稱 函式描述 舉例
concat() 連線多個字串 concat(‘a’, ‘b’, ‘cd’)
concat_ws() 使用指定的分隔符連線多個字串 concat_ws(‘-‘, ‘a’, ‘b’, ‘cd’)
format() 格式化數字 format(1233.1334, 2)
lower() 將字串變為小寫 lower(‘AdbdD’)
upper() 將字串變為大寫 upper(‘iDsdD’)
left() 獲取左邊字串n 位 left(‘mysql’, 3)
right() 獲取右邊字串 n位 right(‘mysql’, 2)
length() 獲取字串長度(包含空格) length(‘abcd’)
ltrim() 刪除前導空格 ltrim(‘abcd’)
rtrim() 刪除後導空格 rtirm(‘abcd’)
trim() 刪除字串前後空格 trim(‘abcd’)
replace() 使用新字串取代舊字串 replace(‘abcdefa’, ‘a’, ‘–’)
substring() 擷取字串(起始位置可以是負值, 第二個引數表示擷取的長度,不是終止位置) substring(‘abcde’, 2,3)

數字運算子和函式

函式名稱 函式描述 舉例
ceil() 進 1 取整 ceil(3.3)
floor() 舍1 取整 floor(3,3)
round() 小數點後n位,四捨五入 round(3.3334, 2)
a div b 整數除法 5 div 3
a mod b 取餘數 5 mod 3
power() 冪運算 power(3, 4)

比較運算子

函式名稱 函式描述 舉例
[not] between .. and … 判斷數字是否在一個區間 3 between 1 and 5
[not] in 判斷是否在一個集合之中 ‘x’ in (‘a’, ‘c’, ‘x’, ‘y’)
is [not] null 判斷是否為空 null is null

日期函式

函式名稱 函式描述 舉例
now() 獲取當前時間 now()
curDate() 當前日期
curTime() 當前時間
version() 獲取當前版本

資訊函式

函式名稱 函式描述 舉例
connection_id()
database() 獲取當前資料庫
last_insert_id() 獲取最後一次插入的id
user() 獲取當前使用者

聚合函式

函式名稱 函式描述 舉例
avg() 求平均值
count() 計數
max() 求最大值
min() 求最小值
sum() 求和