1. 程式人生 > >MySQL_基礎_存儲過程和函數

MySQL_基礎_存儲過程和函數

where 存儲過程 賦值 初始化 初始 數據庫服務器 span 語法 創建過程

存儲過程和函數

含義:一組預先編譯好的SQL語句的集合,理解成批處理語句
    1、提高代碼的重用性
    2、簡化操作
    3、減少了編譯次數並且減少了和數據庫服務器的連接次數,提高了效率

區別:
    存儲過程:可以有0個返回,也可以有多個返回,適合做批量插入、批量更新
    存儲函數:有且僅有1個返回,適合做處理數據後返回一個結果

存儲過程

語法

創建過程
語法:
    CREATE PROCEDURE 存儲過程名(參數列表)
    BEGIN

        存儲過程體(一組合法的SQL語句)
    END

說明:
    
1、參數列表包含三部分 參數模式 參數名 參數類型 舉例: IN name VARCHAR(20) 參數模式: IN:輸入參數 OUT:輸出參數 INOUT:輸入輸出參數 2、存儲過程體中僅有一句話,則可以省略BEGIN END 3、存儲過程體中的每條sql語句的結尾要求必須加分號 4、存儲過程的結尾可以使用 DELIMITER 設置結束標記 語法: DELIMITER 結束標記 舉例: DELIMITER $ 調用過程
語法: CALL 存儲過程名(實參列表); 說明: 調用IN模式參數: CALL 存儲過程名(@變量); 調用OUT模式參數: SET @變量; CALL 存儲過程名(@變量); SELECT @變量; 調用INOUT模式參數: SET @變量
=值; CALL 存儲過程名(@變量); SELECT @變量; 查看過程 語法: SHOW CREATE PROCEDURE 存儲過程名; 刪除過程
語法: DROP PROCEDURE 存儲過程名;

案例

1、創建帶IN模式參數的存儲過程
# 設置結束標記
DELIMITER $

# 創建
CREATE PROCEDURE pro1(IN username VARCHAR(20), IN password VARCHAR(20))
BEGIN
        
    DECLARE result INT DEFAULT 0;            # 聲明並初始化

    SELECT COUNT(*) INTO result              # 賦值
    FROM `user` u WHERE u.username = username
    AND u.password = password;

    SELECT IF(result>0,‘登錄成功,‘登錄失敗);  # 使用

END $

# 調用
CALL pro1(admin, admin)$


2、創建帶OUT模式參數的存儲過程
# 設置結束標記
DELIMITER $

# 創建
CREATE PROCEDURE pro2(IN id INT, OUT username VARCHAR(20), OUT password VARCHAR(20))
BEGIN

    SELECT u.username,u.password INTO username,password                
    FROM `user` u WHERE u.id = id;

END $

# 調用
CALL pro2(1001, @username, @password)$
SELECT @username,@password$


3、創建帶INOUT模式參數的存儲過程
# 設置結束標記
DELIMITER $

# 創建
CREATE PROCEDURE pro3(INOUT a INT ,INOUT b INT)
BEGIN
    SET a = a*2;
    SET b = b*2;
END $

#調用
SET @m=10$
SET @n=20$
CALL pro3(@m,@n)$
SELECT @m,@n$

存儲函數

語法

創建函數
語法:
    CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
    BEGIN
        函數體
    END

說明:
    1、參數列表包含兩部分
    參數名 參數類型

    2、函數體必須有RETURN語句,如果沒有會報錯
    3、函數體中僅有一句話,則可以省略BEGIN END
    4、函數體中的每條sql語句的結尾要求必須加分號
    5、函數的結尾可以使用 DELIMITER 設置結束標記
    語法:
        DELIMITER 結束標記
    舉例:
        DELIMITER $

調用函數
語法:
    SELECT 函數名(參數列表)

查看函數
語法:
    SHOW CREATE FUNCTION 函數名;

刪除函數
語法:
    DROP FUNCTION 函數名;

案例

1、無參返回
# 設置結束標記
DELIMITER $

# 創建
CREATE FUNCTION fun1() RETURNS INT
BEGIN
    DECLARE c INT DEFAULT 0;
    SELECT COUNT(*) INTO c 
    FROM `user`;
    RETURN c;
END $

#調用
SELECT fun1()$

2、有參返回
# 設置結束標記
DELIMITER $

# 創建
CREATE FUNCTION fun2(username VARCHAR(20)) RETURNS VARCHAR(20)
BEGIN
    SET @password=123;
    SELECT u.password INTO @password 
    FROM `user` u WHERE u.username = username;
    RETURN @password;
END $

#調用
SELECT fun2(admin)$

MySQL_基礎_存儲過程和函數