為了搞明白為什麼mysql的存儲過程是高效的,我們需要理解mysql的執行流程是什麼,當輸入sql語句之後,mysql會先進行sql語句語法正確性檢查,然後再進行編譯,然後才執行,最後把結果返回。如下圖所示:
什麼是存儲過程? 存儲過程是sql語句和控制語句的預編譯集合,以一個名稱存儲並作為一個單元處理。 存儲過程的優點: 1 增強了sql語句的功能和靈活性 2 實現較快的執行速度 3 減少了網絡流量 創建存儲過程 CREATE 用戶 PROCEDURE 存儲過程名稱(參數1,參數2,...) 過程體 參數的類型有三種:IN OUT INOUT 過程體:過程體由任意的合法的sql語句組成,不包含建庫建表的SQL 簡單的創建存儲過程案例 #創建不帶參數mysql> create PROCEDURE select_version() select version();
#創建帶IN參數的
1 mysql> delimiter // 2 mysql> create procedure remove_nav(IN id int unsigned) 3 -> begin 4 -> delete from yiqi_navigate where navid=id; 5 -> end 6 -> // 7 Query OK, 0 rows affected (0.00 sec) 8 mysql> delimiter ; 9 mysql> call remove_nav(10);注意:參數名不要跟條件名稱重復,否則可能全刪了。修改定界符為//,是為了過程體的語句 能正常 #創建帶IN OUT的參數,IN參數是輸入參數,OUT是返回的值 mysql> delimiter // mysql> create procedure rem_nav_return(IN id int unsigned,OUT name varchar(64)) -> begin -> delete from yiqi_navigate where navid= id; -> select count(navid) from yiqi_navigate INTO name; 說明:select返回值賦值給name -> end -> // Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; mysql> call rem_nav_return(9,@nums); 這裡的@nums是客戶端變量 刪除存儲過程 #使用drop procedure 存儲過程名 mysql> drop procedure remove_link;