mysql 存儲過程 是什么意思
存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字并給定參數(如果該存儲過程帶有參數)來調用執行它。
一個存儲過程是一個可編程的函數,它在數據庫中創建并保存。它可以有SQL語句和一些特殊的控制結構組成。當希望在不同的應用程序或平臺上執行相同的函數,或者封裝特定功能時,存儲過程是非常有用的。數據庫中的存儲過程可以看做是對編程中面向對象方法的模擬。它允許控制數據的訪問方式。
存儲過程通常有以下優點:
1. 存儲過程增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。
2. 存儲過程允許標準組件是編程。存儲過程被創建后,可以在程序中被多次調用,而不必重新編寫該存儲過程的SQL語句。而且數據庫專業人員可以隨時對存儲過程進行修改,對應用程序源代碼毫無影響。
3. 存儲過程能實現較快的執行速度。如果某一操作包含大量的Transaction-SQL代碼或分別被多次執行,那么存儲過程要比批處理的執行速度快很多。因為存儲過程是預編譯的。在首次運行一個存儲過程時查詢,優化器對其進行分析優化,并且給出最終被存儲在系統表中的執行計劃。而批處理的Transaction-SQL語句在每次運行時都要進行編譯和優化,速度相對要慢一些。
4. 存儲過程能過減少網絡流量。針對同一個數據庫對象的操作(如查詢、修改),如果這一操作所涉及的Transaction-SQL語句被組織程存儲過程,那么當在客戶計算機上調用該存儲過程時,網絡中傳送的只是該調用語句,從而大大增加了網絡流量并降低了網絡負載。
5. 存儲過程可被作為一種安全機制來充分利用。系統管理員通過執行某一存儲過程的權限進行限制,能夠實現對相應的數據的訪問權限的限制,避免了非授權用戶對數據的訪問,保證了數據的安全。
MySQL存儲過程創建的格式如下:
CREATE PROCEDURE 過程名 ([過程參數[,。]])
[特性 。] 過程體
舉例代碼如下:
CREATE PROCEDURE proc1(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM user;
END存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用","分割開。
過程體的開始與結束使用BEGIN與END進行標識。
注意:MySQL在5.0以前并不支持存儲過程
在mysql數據庫 用sql語句怎么寫存儲過程
delimiter $$
create procedure proc_login()
begin
insert into login_history(IP,userID,loginType,loginTime) select IP,userid,loginType,loginTime from log_login;
delete from log_login;
end$$
delimiter ;有問題再追問吧,望采納。
求一個mysql存儲過程的語句寫法
create table t_A(id int primary key auto_increment,name varchar(20));
create table t_X(id int,score int);
CREATE DEFINER=`root`@`localhost` PROCEDURE `mypro`(in sname varchar(20),in score int,in tableName varchar(50))
BEGIN
insert into t_A(name) value (sname);
set @id=(select max(id) from t_A);
set @stmt = concat("insert into ",tableName," values(",@id,",",score,")");
prepare stmt from @stmt;
execute stmt;
END
mysql存儲過程是什么意思?什么時候會用到,主要用來做什么? - 搜
存儲過程簡單來說,就是為以后的使用而保存的一條或多條MySQL語句的集合。可將其視為批件,雖然它們的作用不僅限于批處理。 存儲過程就是有業務邏輯和流程的集合, 可以在存儲過程中創建表,更新數據, 刪除等等。
你可以理解為用sql語句開發的一個 類和函數。
為什么要使用存儲過程
通過把處理封裝在容易使用的單元中,簡化復雜的操作(正如前面例子所述)。
由于不要求反復建立一系列處理步驟,這保證了數據的完整性。如果所有開發人員和應用程序都使用同一(試驗和測試)存儲過程,則所使用的代碼都是相同的。這一點的延伸就是防止錯誤。需要執行的步驟越多,出錯的可能性就越大。防止錯誤保證了數據的一致性。
簡化對變動的管理。如果表名、列名或業務邏輯(或別的內容)有變化,只需要更改存儲過程的代碼。使用它的人員甚至不需要知道這些變化。
關于mysql 的存儲過程
mysql> delimiter //
這個作用是把;變成//,以后的語句遇到//就結束了,遇到;不結束,下面就可以按你的想法寫了
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ; 這里把雙引號改回來
聲明參數要在說明是 輸入還是輸出函數 in\out
給函數變量賦值用
set @a=10;
例子:
drop procedure if exists pr_param_in;
create procedure pr_param_in
(
in id int -- in 類型的 MySQL 存儲過程參數
)
begin
if (id is not null) then
set id = id + 1;
end if;
select id as id_inner;
end;
set @id = 10;
call pr_param_in(@id);
select @id as id_out;
mysql> call pr_param_in(@id);
轉載請注明出處華閱文章網 » mysql語句存儲過程