上次面試的時候被問到會不會寫存儲過程,因平時工作也用的比較少,在此學習記錄一下已備後期查閱。
1、存儲過程
什麼是存儲過程:存儲過程是一個記錄集,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個代碼塊取一個名字,在用到這個功能的時候調即可。
存儲過程的好處:
1.由於數據庫執行動作時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,所以執行效率要比T-SQL語句高。
2.一個存儲過程在程序在網絡中交互時可以替代大堆的T-SQL語句,所以也能降低網絡的通信量,提高通信速率。
3.通過存儲過程能夠使沒有權限的用戶在控制之下間接地存取數據庫,從而確保數據的安全。
2、基本語法
1、調用存儲過程
call pr_no_param();
2、刪除存儲過程
drop procedure pr_name;
note:不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程。
3、show procedure status
顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等。
4、 show create procedure pr_name
顯示某一個存儲過程的詳細信息
1. MySQL 存儲過程名字後面的“()”是必須的,即使沒有一個參數,也需要“()”
2. MySQL 存儲過程參數,不能在參數名稱前加“@”3. MySQL 存儲過程的參數不能指定默認值。
4. MySQL 存儲過程不需要在 procedure body 前面加 “as”。而 SQL Server 存儲過程必須加 “as” 關鍵字
5. 如果 MySQL 存儲過程中包含多條 MySQL 語句,則需要 begin end 關鍵字
6. MySQL 存儲過程中的每條語句的末尾,都要加上分號 “;”
7.註釋,多行註釋/*...*/,
-- 這是單行 MySQL 註釋 (注意 -- 後至少要有一個空格)
# 這也是個單行 MySQL 註釋 8. 不能在 MySQL 存儲過程中使用 “return” 關鍵字 9. 調用 MySQL 存儲過程時候,需要在過程名字後面加“()”,即使沒有一個參數,也需要“()” 10. 因爲 MySQL 存儲過程參數沒有默認值,所以在調用 MySQL 存儲過程時候,不能省略參數。可以用 null 來替代。
3、實例 參考http://l62s.iteye.com/blog/1532745
表數據入下
3.1只返回單一記錄集的存儲過程(返回整個表)
新建stored procedures
CREATE PROCEDURE `getuseraccount`()
BEGIN
select * from useraccount;
END
新建後,新建查詢通過call new_schema.getuseraccount();執行
3.2沒有輸入輸出的存儲過程(插入新的行)
CREATE PROCEDURE `adduseraccount`()
BEGIN
insert into useraccount values(22,'FRESHMAN',11,'2013-01-11',21);
END
注意:字符要用引號括起來
3.3其他參考博文