含義:一組預先編譯好的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')$