1.變量的類型
-- 1.用戶變量,和MySql客戶端綁定的,只對當前客戶端生效 以」@」開始,形式爲」@變量名。」
SET @param = '123';
SELECT @param AS param數據庫
-- 2.全局變量 定義時,以以下兩種形式出現,set GLOBAL 變量名 或者 set @@global.變量名。show global variables;
-- 對全部客戶端生效。只有具備super權限才能夠設置全局變量。安全
-- 3.會話變量:只對鏈接的客戶端有效。一旦客戶端失去鏈接,變量失效。show session variables;
SHOW SESSION VARIABLES服務器
-- 4.局部變量:做用範圍在begin到end語句塊之間。在該語句塊裏設置的變量declare語句專門用於定義局部變量。
-- 如: DECLARE l_numeric number(8,2) DEFAULT 9.95;網絡
全局變量和會話變量的區別:全局變量在MySQL啓動的時候由服務器自動將它們初始化爲默認值,
這些默認值能夠經過更改my.ini這個文件來更改。會話變量在每次創建一個新的鏈接的時候,由MYSQL來初始化。
MYSQL會將當前全部全局變量的值複製一份。來作爲會話變量。全局變量與會話變量的區別就在於,
對全局變量的修改會影響到整個服務器,可是對會話變量的修改,只會影響到當前的會話(也就是當前的數據庫鏈接)。
非root用戶在修改全局變量時會報沒有權限,在修改會話變量時也須要注意,有些變量是不能修改的,只能由root用戶進行修改,
例如:event_scheduler。session
2、存儲過程的優勢
1.存儲過程加強了SQL語言的功能和靈活性。存儲過程能夠用流控制語句編寫,有很強的靈活性,能夠完成複雜的判斷和較複雜的運算。
2.當SQL語句有變更時,能夠只修改數據庫中的存儲過程而沒必要修改代碼。
3.存儲過程能實現較快的執行速度。若是某一操做包含大量的SQL代碼或分別被屢次執行,那麼存儲過程要比批處理的執行速度快不少。
由於存儲過程是預編譯的。在首次運行一個存儲過程時查詢,優化器對其進行分析優化,而且給出最終被存儲在系統表中的執行計劃。
而批處理的SQL語句在每次運行時都要進行編譯和優化,速度相對要慢一些。
4.減小網絡傳輸。在客戶端調用一個存儲過程固然比執行一串SQL傳輸的數據量要小。
5.存儲過程可被做爲一種安全機制來充分利用。系統管理員經過執行某一存儲過程的權限進行限制,可以實現對相應的數據的訪問權限的限制,
避免了非受權用戶對數據的訪問,保證了數據的安全。優化
3、存儲過程的參數
MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ] 參數名 數據類型…])
IN 輸入參數:表示該參數的值必須在調用存儲過程時指定,在存儲過程當中修改該參數的值不能被返回,爲默認值
OUT 輸出參數:該值可在存儲過程內部被改變,並可返回
INOUT 輸入輸出參數:調用時指定,而且可被改變和返回
.net