這篇文章帶給大家的內容是關於MySQL的變數有哪些?怎麼用?有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
MySQL 的變數分為四種: 局部變數 、 使用者變數 、 會話變數 和 全域變數 ,其中局部變數只存在於函數和儲存過程,這裡不多了解。其中 會話變數 和 全域變數 在 MySQL 中統稱為 系統變數 。
使用者變數
基本
顧名思義,就是使用者定義的變數。如何定義變數呢?有兩種方法:
SET 方式
# 两种方式都可以 SET @variable = expr SET @variable := expr
SELECT 方式
# 必须 := SELECT @variable := expr
使用者變數定義備註:
null(可不定義變數直接使用,不會報錯)
select 中的
limit 語句等。
SELECT @a = 0, @a := @a 1;,兩列都可能是0 。
SET @m = 0; SET @m = 3, @n = @m; SELECT @n; # 0
CREATE TABLE employee ( id int primary key, salary int not null ); INSERT INTO employee VALUES(1, 100); INSERT INTO employee VALUES(2, 200); INSERT INTO employee VALUES(3, 300);根據先前學習的內容,我們可以很快的寫出如下SQL:
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r;沒有問題,一切都和預期一樣,然後我們加一個WHERE 條件試試:
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r WHERE @rowno = 0;理論上,這是不應該回傳資料的,但它還就是回傳了一條數據,就是id 為1 的那條。
為什麼呢? WHERE 條件使用的 @rowno 一直都是同一個值 0 ,它不會因為 SELECT 上修改了就即時回應 。要實現
WHERE 的功能需要改寫成如下:
SELECT salary, rowno FROM ( SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r ) m WHERE rowno = 2;實際上在SELECT 的WHERE 、 GROUP BY 和ORDER BY 中使用者變數都不會如預期操作,它使用的是舊值,不會即時修改。 系統變數會話變數會話變數為伺服器為每個客戶端連線維護的變數。在客戶端連線時,使用對應全域變數的目前值對客戶端的會話變數進行初始化。 顧名思義,會話變數的作用域就是一個會話 Session 咯。如何為會話變數設定值呢?如下:
set session var_name = value; set @@session.var_name = value; set var_name = value;注意,只能為現有的會話變數設定值,不能建立新的會話變數。那如何取得會話變數呢?如下:
show session variables; # 以上代码会把所有会话变量罗列出来,可通过 like 进行过滤 show session variables LIKE "%var%";全域變數全域變數會影響伺服器整體操作。但是一旦重啟,這些設定會被重置。注意要想更改全域變量,必須具有SUPER權限。 它的設定和會話變數的設定是類似的:
set global var_name = value; set @@global.var_name = value;全域變數也不能新增變量,只能修改現有的。而取得全域變數的運算也是和會話變數類似:
show session variables; show global variables like "%var%";
以上是MySQL的變數有哪些?怎麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!