mysql為什麼需要存儲過程
直白的講就是把SQL語句進行封裝,然後留個介面,使用的時候直接調用介面。
② 為什麼要使用 mysql 存儲過程
速度快,存儲過程是一種特殊的sql語句!
③ mysql 為什麼不用存儲過程
我不是這樣理解的
1對於某些返回行紀錄很多的情況,存儲過程發揮很大作用,第1次編譯之後,之後不用再編譯,直接走執行計劃
理論上要快很多的
2特別某些大表,復雜應用有時候必須用存儲過程
我回憶很多年前作項目,有專家指導團隊要求所有SQL代碼全部轉為存儲過程----一方面安全性,另1方面速度理論要快
現在我當前環境確實是並發量大的應用,我覺得對於單條插入 刪除 修改等操作可以不用
但是類似 SQL我覺得還是應該用存儲過程 (現在我不知道mysql的內部機智)
④ mysql中存儲過程是什麼意思
存儲過程(stored
procere)是一組為了完成特定功能的sql語句集,經編譯後存儲在資料庫中,用戶通過指定存儲過程的名字並給定參數(如果該存儲過程帶有參數)來調用執行它。
一個存儲過程是一個可編程的函數,它在資料庫中創建並保存。
⑤ mysql 存儲過程 是什麼意思
用select...into語句
下面是mysql 5.0的幫助文檔的:
這個SELECT語法把選定的列直接存儲到變數。因此,只有單一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用戶變數名在MySQL 5.1中是對大小寫不敏感的。請參閱9.3節,「用戶變數」。
重要: SQL變數名不能和列名一樣。如果SELECT ... INTO這樣的SQL語句包含一個對列的參考,並包含一個與列相同名字的局部變數,MySQL當前把參考解釋為一個變數的名字。例如,在下面的語句中,xname 被解釋為到xname variable 的參考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
當這個程序被調用的時候,無論table.xname列的值是什麼,變數newname將返回值『bob』。
⑥ 為什麼MySQL的存儲過程的書寫這么麻煩DELIMITER 這種字元有什麼作用
其實就是告訴mysql解釋器,該段命令是否已經結束了,mysql是否可以執行了。
默認情況下,delimiter是分號;。在命令行客戶端中,如果有一行命令以分號結束,
那麼回車後,mysql將會執行該命令。如輸入下面的語句
mysql> select * from test_table;
然後回車,那麼MySQL將立即執行該語句。
但有時候,不希望MySQL這么做。在為可能輸入較多的語句,且語句中包含有分號。
如試圖在命令行客戶端中輸入如下語句
mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
mysql> RETURNS varchar(255)
mysql> BEGIN
mysql> IF ISNULL(S) THEN
mysql> RETURN '';
mysql> ELSEIF N<15 THEN
mysql> RETURN LEFT(S, N);
mysql> ELSE
mysql> IF CHAR_LENGTH(S) <=N THEN
mysql> RETURN S;
mysql> ELSE
mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql> END IF;
mysql> END IF;
mysql> END;
默認情況下,不可能等到用戶把這些語句全部輸入完之後,再執行整段語句。
因為mysql一遇到分號,它就要自動執行。
即,在語句RETURN '';時,mysql解釋器就要執行了。
這種情況下,就需要事先把delimiter換成其它符號,如//或$$。
mysql> delimiter //
mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
mysql> RETURNS varchar(255)
mysql> BEGIN
mysql> IF ISNULL(S) THEN
mysql> RETURN '';
mysql> ELSEIF N<15 THEN
mysql> RETURN LEFT(S, N);
mysql> ELSE
mysql> IF CHAR_LENGTH(S) <=N THEN
mysql> RETURN S;
mysql> ELSE
mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql> END IF;
mysql> END IF;
mysql> END;//
這樣只有當//出現之後,mysql解釋器才會執行這段語句
⑦ mysql存儲過程為什麼不推薦使用
維護不方便,對資料庫壓力不較大,不易於資料庫集群的擴展和遷移。
能夠在業務系統層面做的邏輯盡量不要用存儲過程來做。
以後做資料庫的遷移的時候,換了資料庫,存儲過程可能要重寫或重構。但是如果放在業務代碼層去實現對應的邏輯,資料庫換了之後,更改對應的連接驅動,業務代碼不用做任何吸怪。
⑧ mysql 存儲過程有用嗎
當然有用,原因:
1、存儲過程在被創建以後可以在程序中被多次調用,而不必重新編寫該存儲過程,並且這個存儲過程可以修改,但對應用程序源代碼毫無影響。
2、存儲過程能夠實現較快的執行速度。
3、存儲過程能夠減少網路流量。
4、存儲過程可被作為一種安全機制來充分利用。
⑨ mysql 什麼情況下使用存儲過程
mysql 執行語句是要先編譯,然後再執行的。這樣如果查詢並發大的時候。會浪費很多資源和時間。造成mysql進程佔用資源過多,症狀就是慢。
但存儲過程可以把一些特別的語句封裝成一個方法 ,再編譯好成一個可以執行的方法,對外只要接收參數就可以了。這樣就不用再編譯。執行就快了
什麼時候會用到?你覺得你資料庫因為同時出現太多讀寫操作而變得慢 ,那麼就要用了
主要用來提升性能。。