變量分類:
用戶變量:只對當前用戶使用的客戶端生效,以”@”開始,形式為”@變量名”;用戶變量跟MySQL客戶端是綁定的;用戶定義的變量就叫用戶變量,這樣理解的話,會話變量和全局變量都可以是用戶定義的變量,只是他們是對當前客戶端生效還是對所有客戶端生效的區別了。所以,用戶變量包括了會話變量和全局變量;
會話變量:使用set語句定義,只對連接的客戶端有效;局部變量:使用declare語句定義,作用范圍在begin到end語句塊之間,在該語句塊里設置的變量。全局變量:使用set語句定義,對所有客戶端生效,以如下兩種形式定義,set GLOBAL 變量名 或者 set @@global.變量名。只有具有super權限才可以設置全局變量。
局部變量與用戶變量的區分:
用戶變量是以”@”開頭的。局部變量沒有這個符號;定義語句不同。用戶變量使用set語句,局部變量使用declare語句定義;作用范圍不同。局部變量只在begin-end語句塊之間有效。在begin-end語句塊運行完之后,局部變量就消失了。所以,最后它們之間的層次關系是:變量包括局部變量和用戶變量,用戶變量包括會話變量和全局變量。
使用:
set @var 若沒有指定GLOBAL 或session ,那么默認將會定義用戶變量,兩種方式定義用戶變量:
”=”,如 set @a =3,@a:=5;“:=”。select常常這樣使用。總結:使用select 和set設置變量的區別,set可以使用以上兩種形式設置變量,而select只能使用”:=”的形式設置變量。 實踐積累:用戶變量在mysql客戶端退出后,會自動消失,之后再次打開客戶端,使用”select @a;” 顯示變了的值為null,說明,未定義的變量初始化是null。
egg:
SELECT (@row:= @row+1) AS row, // 使用行號變量 u.*FROM t_f_sort u, ( SELECT @row:=0) r // 定義行號變量新聞熱點
疑難解答