mysql變數使用總結

2022-03-07 14:27:51 字數 2487 閱讀 8450

set語句的學習:

使用select定義使用者變數的實踐

將如下語句改成select的形式:

set @var=(select sum(amount) from penalties);

我的修改:

select @var:=(select sum(amount) from penalties);

我這樣改,雖然是可以的。但是,對比的書中的答案,發現這樣的方式太蹩腳了。說明沒有很好地理解select定義變數的本質。

在select中,發現有乙個使用者變數,如果沒有定義,那麼就會初始化。

select子句原來的方式根本不受到影響。只是增加了使用者變數。所以,還是按照原來的方式使用select子句。那麼像:select sum(amount) from penalties。增加變數就成

了:select  @var:=sum(amount) from penalties。

將sum(amount)的結果賦給變數@var:。變數前面有select,那使用者麼就是顯示該變數了。

筆記部分:mysql變數的術語分類:

1.使用者變數:以"@"開始,形式為"@變數名"

使用者變數跟mysql客戶端是繫結的,設定的變數,只對當前使用者使用的客戶端生效

2.全域性變數:定義時,以如下兩種形式出現,set global 變數名  或者  set @@global.變數名 

對所有客戶端生效。只有具有super許可權才可以設定全域性變數

3.會話變數:只對連線的客戶端有效。

4.區域性變數:作用範圍在begin到end語句塊之間。在該語句塊裡設定的變數

declare語句專門用於定義區域性變數。set語句是設定不同型別的變數,包括會話變數和全域性變數

通俗理解術語之間的區別:

使用者定義的變數就叫使用者變數。這樣理解的話,會話變數和全域性變數都可以是使用者定義的變數。只是他們是對當前客戶端生效還是對所有客戶端生效的區別了。所以,使用者變數包括了會話變數和全域性變數

區域性變數與使用者變數的區分在於兩點:1.使用者變數是以"@"開頭的。區域性變數沒有這個符號。2.定義變數不同。使用者變數使用set語句,區域性變數使用declare語句定義 3.作用範圍。區域性變數只在begin-end語句塊之間有效。在begin-end語句塊執行完之後,區域性變數就消失了。

所以,最後它們之間的層次關係是:變數包括區域性變數和使用者變數。使用者變數包括會話變數和全域性變數。

使用備忘,set @var 若沒有指定global 或session ,那麼預設將會定義使用者變數

兩種方式定義使用者變數:

1."=",如 set @a =3,@a:=5

2.":="。select常常這樣使用

總結:使用select 和set設定變數的區別,set可以使用以上兩種形式設定變數。而select只能使用":="的形式設定變數

實踐積累:使用者變數在mysql客戶端退出後,會自動消失。之後我開啟客戶端,使用"select @a;" 顯示變了的值為null。說明,未定義的變數初始化是null

實際中的問題

設定常量對group_concat()的配置影響:

set @@group_concat_max_len=4

手冊中提到設定的語法是這樣的:

set [session | global] group_concat_max_len = val;

以下兩種形式都能達到達到同樣的效果,但是有什麼區別?

set @@global.group_concat_max_len=4;

global可以省略,那麼就變成了:set @@group_concat_max_len=4;

2011.2.25

之前的理解不怎麼準確。現在對加深理解後的地方進行總結。

mysql中變數的層次關係是:大體包括使用者變數和系統變數。系統變數包括系統會話變數和系統全域性變數。

我是這樣理解相互之間的區別:

因為使用者變數就是使用者定義的變數,系統變數就是mysql定義和維護的變數。所以,使用者變數與系統變數的區別在於,是誰在管理這些變數。mysql一啟動的時候就會讀取系統變數(這樣做目的是可以確定mysql的以何種機制或模式執行)。 系統會話變數與使用者變數都是在當前客戶端退出後消失。他們之間的區別可以這樣理解,雖然常常看到"set @@varible"的形式去改變系統變數的值,但是並不涉及到定義系統變數。使用者變數是可以自己定義(初始化)。系統變數按照只是在改變值。

區域性變數只在begin-end語句塊中定義並有效。執行到該語句塊之後就消失了。定義的方式有明顯的特點,使用declare語句。

為什麼看到使用系統變數以"@@變數名"和"變數名"的形式出現,怎麼理解兩者形式的區別?

使用系統變數理論上是可以使用兩種形式:1.前面帶有符號"@@" 2.符號省略。比如我會看的如下形式:current_user。但是,約定系統變數要使用"@@變數名"的形式,就是在前面加上符號"@@"。

為什麼會出現current_user這樣沒有符號的情況?看書籍《sql for mysql developers a comprehensive tutorial and reference》大致說明的原因,這樣做是為了與其他的sql產品保持一致。

mysql變數使用總結

set語句的學習 使用select定義使用者變數的實踐 將如下語句改成select的形式 set var select sum amount from penalties 我的修改 select var select sum amount from penalties 我這樣改,雖然是可以的。但是,...

mysql變數使用總結

set語句的學習 使用select定義使用者變數的實踐 將如下語句改成select的形式 set var select sum amount from penalties 我的修改 select var select sum amount from penalties 我這樣改,雖然是可以的。但是,...

mysql 使用變數 MySQL變數的使用

在編寫儲存過程中,有時需要使用變數,儲存資料處理過程中的值 mysql中,變數可以在子程式中,宣告並使用,作用範圍在begin end程式中 在儲存過程中,使用declare語句,定義變數 語法格式 declare var name varname date type default value v...