MySQL宣告變數以及賦值

2021-09-24 12:55:36 字數 2001 閱讀 1715

mysql 的變數分為四種: 區域性變數 、 使用者變數 、 會話變數 和 全域性變數 ,其中區域性變數只存在於函式和儲存過程,這裡不多了解。其中 會話變數 和 全域性變數 在 mysql 中統稱為 系統變數 。

# 兩種方式都可以

set@variable

= expr

set@variable := expr

# 必須 :=

select

@variable := expr

我們來乙個簡單的示例,實現乙個序號的功能,表和資料如下:

create

table employee (

id int

primary

key,

salary int

notnull);

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;

+--------+-------+

| salary | rowno |

+--------+-------+

| 100 | 1 |

| 200 | 2 |

| 300 | 3 |

+--------+-------+

沒有問題,一切都和預期一樣,然後我們加乙個 where 條件試試:

select salary,

(@rowno :=

@rowno+1

)as'rowno'

from employee,

(select

@rowno :=

0) r

where

@rowno=0

;

+--------+-------+

| salary | rowno |

+--------+-------+

| 100 | 1 |

+--------+-------+

理論上來說,這是不應該返回資料的,但是它還就是返回了一條資料,就是 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;

+--------+-------+

| salary | rowno |

+--------+-------+

| 200 | 2 |

+--------+-------+

實際上在 select 的 where 、 group by 和 order by 中使用者變數都不會按預期操作,它使用的是舊值,不會實時修改。

mysql申明變數以及賦值

sql server中變數要先申明後賦值 區域性變數用乙個 標識,全域性變數用兩個 常用的全域性變數一般都是已經定義好的 申明區域性變數語法 declare 變數名 資料型別 例如 declare num int 賦值 有兩種方法式 num為變數名,value為值 set num value 或 s...

MySql 申明變數以及賦值

sql server中變數要先申明後賦值 區域性變數用乙個 標識,全域性變數用兩個 常用的全域性變數一般都是已經定義好的 申明區域性變數語法 declare 變數名 資料型別 例如 declare num int 賦值 有兩種方法式 num為變數名,value為值 set num value 或 s...

MySql 申明變數以及賦值

sql server中變數要先申明後賦值 區域性變數用乙個 標識,全域性變數用兩個 常用的全域性變數一般都是已經定義好的 申明區域性變數語法 declare 變數名 資料型別 例如 declare num int 賦值 有兩種方法式 num為變數名,value為值 set num value 或 s...