mysql 儲存過程 (procedure)和常用函式(function)
阿新 • • 發佈:2019-01-24
一, 基本知識
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() | 求和 |