1.情景展示
在mysql中,如何申明一個變量並進行使用?
MySQL中主要有三種類型的變量:局部變量、系統變量及用戶自定義變量。
2.局部變量(無前綴)
2.1 聲明變量
作用域:BEGIN,END之間才能訪問得到;
適用范圍:可以用在存儲過程或函數中;
使用前提:必須使用關鍵詞DECLARE或者作為存儲過程的輸入或輸出參數使用。
說 明:
多個變量的聲明必須使用多個declare一一對應,否則會報錯;
定義變量的數據類型時,必須指定允許接收的最大字節數,否則會報錯。
以上兩種變量的定義方式,在BEGIN,END之間進行賦值之后,就能直接使用啦。
2.2 變量賦值
方式一:在定義變量的時候設置默認值;
比如:
DECLARE V_END_NUMBER VARCHAR ( 50 ) DEFAULT '12345';
需要提醒的一點是:在使用declare定義變量的時候,如果不設置默認值的話,它的初始化值=NULL。
方式二:select cloumn1, cloumn2, ... into v_name1, v_name2, ... from table。
這里還涉及兩種情況:
當將查詢結果塞給兩個及以上變量時,INTO左邊的字段和INTO右邊的變量數量必須一一對應上才行,並且只能使用一個INTO;
當將查詢結果塞給一個變量時,可以將這個作為最后一個查詢字段,並且可以使用INTO賦值,后面不能再跟其他字段。
3.系統變量(以@@為前綴)
MySQL服務器維護許多系統變量配置為默認值。系統變量可以分為:
GLOBAL類型:全局變量(影響服務器的整體操作);
SESSION類型:會話變量(影響其對各個客戶端連接的操作);
BOTH類型:現在還不知道它是個啥。
3.1 查詢變量
要查看正在運行的服務器使用的當前值,有兩種方式:
方式一:SHOW VARIABLES 語句或變量名;
以自動提交為例:
方式二:SELECT @@變量名。
以自動提交為例:
3.2 修改變量
修改全局變量有2種方式:
SET GLOBAL sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000;
修改會話變量有4種方式:
SET sort_buffer_size=1000000; SET SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@local.sort_buffer_size=10000;
4.自定義變量(以@為前綴)
您可以訪問任何用戶定義的變量,而不聲明它或初始化它;
如果引用尚未初始化的變量,則它的值為NULL,並且類型為字符串;
變量類型:整數,小數,浮點數,二進制或非二進制字符串或NULL;
用戶定義的變量是會話特定的。 也就是說,由一個客戶端定義的用戶變量不能被其他客戶端看到或使用。
使用自定義變量,無需聲明直接賦值就可以啦。
4.1 變量賦值
方式一:使用set
變形一:set @變量名=變量值
變形二:set @變量名:=變量值
方式二:使用select
注意:使用select賦值,必須使用“:=”,不能使用“=”,因為等於號在這里代表的含義是:比較;
變形一:select @變量名:=變量值
變形二:select @變量名:=字段名 from table where ... limit 1;
說明:通過查表給變量賦值的方式,前提條件是查詢結果只有一條記錄;
為什么要限定一條記錄,因為變量只有一個值!下面我們可以進行一下測試:
看似變量userKey2有多個變量值,事實果真如此嗎?
其實際結果只有一項,就是上面多條記錄最末行的值。
4.2 變量使用
用法:@變量名
這樣一來,就可以看出:使用局部變量最終是要服務於於SQL的,不然變量的定義沒有任何意義。
我們可以得出這樣的結論:局部變量適用於SQL執行。