mysql 變數作用 MySQL的變數類別及作用

2021-10-18 18:21:46 字數 2476 閱讀 4204

mysql的變數類別及作用

閱讀:121

下面跟著筆者一起來了解下mysql的變數類別及作用,相信大家看完肯定會受益匪淺,文字在精不在多,希望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

雖然使用者變數的型別可以動態修改,但不建議這麼操作,因為在交接**的時候你可能會有生命危險:p。

作為變數,都是有作用域的,使用者變數的作用是整個會話,即整個會話間都是有效的。這看起來不錯,但要注意,當使用了連線池,自定義的使用者變數又沒有正確初始化,容易出現意想不到的問題。因為它實際上並沒有被銷毀,依舊記錄者上一次的結果。

示例我們來乙個簡單的示例,實現乙個序號的功能,表和資料如下: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

) mwhere 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自定義變數的作用

使用者自定義變數的宣告方法形如 var name,其中變數名稱由字母 數字 和 組成。當然,在以字串或者識別符號引用時也 可以包含其他字元 例如 my var my var 或者 my var 使用者自定義變數是會話級別的變數。其變數的作用域僅限於宣告其的客戶端鏈結。當這個客戶端斷開時,其所有的會話...

mysql負變數 MySQL的變數

系統變數 系統定義好的變數,大部分時候使用者根本不需要使用系統變數。系統變數是用來控 務器表現的。如 autocommit,auto increment increment等。檢視系統變數 檢視所有變數 show variables 檢視範圍變數 show variables like 變數名 修改...

mysql中 變數 mysql中的變數

toc 變數 mysql本質是一種程式語言,需要很多變數來儲存資料。mysql中很多的屬性控制都是通過mysql中固有的變數來實現的。系統變數 系統內部定義的變數,系統變數針對所有使用者 mysql客戶端 有效。檢視系統所有變數 show variables like pattern mysql允許...