MySQL_基礎_存儲過程和函數

存儲過程和函數

含義:一組預先編譯好的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')$
相關文章
相關標籤/搜索