真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL的變量類別及作用

下面跟著筆者一起來(lái)了解下MySQL的變量類別及作用,相信大家看完肯定會(huì)受益匪淺,文字在精不在多,希望MySQL的變量類別及作用這篇短內(nèi)容是你想要的。                                                             

10多年的昌都網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整昌都建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“昌都網(wǎng)站設(shè)計(jì)”,“昌都網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

MySQL 的變量分為四種: 局部變量 、 用戶變量 、 會(huì)話變量 和 全局變量 ,其中局部變量只存在于函數(shù)和存儲(chǔ)過(guò)程,這里不多了解。其中 會(huì)話變量 和 全局變量 在 MySQL 中統(tǒng)稱為 系統(tǒng)變量 。

用戶變量

基本

顧名思義,就是用戶定義的變量。如何定義變量呢?有兩種方法:

SET 方式

# 兩種方式都可以
SET @variable = expr
SET @variable := expr

SELECT 方式

# 必須 :=
SELECT @variable := expr

用戶變量定義備注:

  1. 未定義變量的初始值為 null(可不定義變量直接使用,不會(huì)報(bào)錯(cuò))

  2. 變量名對(duì)大小寫不敏感

  3. 變量不能在要求字面值的地方使用,比如 select 中的 limit 語(yǔ)句等。

  4. 調(diào)用用戶變量的表達(dá)式的計(jì)算順序?qū)嶋H上是未定義的,如 SELECT @a = 0, @a := @a + 1;,兩列都可能是 0 。

  5. 為用戶變量賦值時(shí),會(huì)先確定表達(dá)式的值。如何理解,請(qǐng)看如下代碼:

    SET @m = 0;
    SET @m = 3, @n = @m;
    SELECT @n; # 0
  6. 雖然用戶變量的類型可以動(dòng)態(tài)修改,但不建議這么操作,因?yàn)樵诮唤哟a的時(shí)候你可能會(huì)有生命危險(xiǎn):p。

作為變量,都是有作用域的,用戶變量的作用是整個(gè)會(huì)話,即整個(gè)會(huì)話間都是有效的。這看起來(lái)不錯(cuò),但要注意,當(dāng)使用了連接池,自定義的用戶變量又沒(méi)有正確初始化,容易出現(xiàn)意想不到的問(wèn)題。因?yàn)樗鼘?shí)際上并沒(méi)有被銷毀,依舊記錄者上一次的結(jié)果。

示例

我們來(lái)一個(gè)簡(jiǎn)單的示例,實(shí)現(xiàn)一個(gè)序號(hào)的功能,表和數(shù)據(jù)如下:

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);

根據(jù)之前學(xué)習(xí)的內(nèi)容,我們可以很快的寫出如下 SQL:

SELECT salary, (@rowno := @rowno + 1) AS 'rowno'
FROM employee, (SELECT @rowno := 0) r;

沒(méi)有問(wèn)題,一切都和預(yù)期一樣,然后我們加一個(gè) WHERE 條件試試:

SELECT salary, (@rowno := @rowno + 1) AS 'rowno'
FROM employee, (SELECT @rowno := 0) r
WHERE @rowno = 0;

理論上來(lái)說(shuō),這是不應(yīng)該返回?cái)?shù)據(jù)的,但是它還就是返回了一條數(shù)據(jù),就是 id 為 1 的那條。
為什么呢? WHERE 條件使用的 @rowno 一直都是同一個(gè)值 0 ,它不會(huì)因?yàn)?SELECT 上修改了就實(shí)時(shí)響應(yīng) 。要實(shí)現(xiàn)
WHERE 的功能需要改寫成如下:

SELECT salary, rowno
FROM (
    SELECT salary, (@rowno := @rowno + 1) AS 'rowno'
    FROM employee, (SELECT @rowno := 0) r
) m
WHERE rowno = 2;

實(shí)際上在 SELECT 的 WHERE 、 GROUP BY 和 ORDER BY 中用戶變量都不會(huì)按預(yù)期操作,它使用的是舊值,不會(huì)實(shí)時(shí)修改。

系統(tǒng)變量

會(huì)話變量

會(huì)話變量為云服務(wù)器為每個(gè)客戶端連接維護(hù)的變量。在客戶端連接時(shí),使用相應(yīng)全局變量的當(dāng)前值對(duì)客戶端的會(huì)話變量進(jìn)行初始化。

顧名思義,會(huì)話變量的作用域就是一個(gè)會(huì)話 Session 咯。如何為會(huì)話變量設(shè)置值呢?如下:

set session var_name = value;
set @@session.var_name = value;
set var_name = value;

注意,只能為現(xiàn)有的會(huì)話變量設(shè)置值,不能創(chuàng)建新的會(huì)話變量。那如何獲取會(huì)話變量呢?如下:

show session variables;
# 以上代碼會(huì)把所有會(huì)話變量羅列出來(lái),可通過(guò) like 進(jìn)行過(guò)濾
show session variables LIKE "%var%";

全局變量

全局變量會(huì)影響云服務(wù)器整體操作。但是一旦重啟,這些設(shè)置會(huì)被重置。注意要想更改全局變量,必須具有SUPER權(quán)限。

它的設(shè)置和會(huì)話變量的設(shè)置是類似的:

set global var_name = value;
set @@global.var_name = value;

全局變量也不能新增變量,只能修改已有的。而獲取全局變量的操作也是和會(huì)話變量類似:

show session variables;
show global variables like "%var%";

看完MySQL的變量類別及作用這篇文章后,很多讀者朋友肯定會(huì)想要了解更多的相關(guān)內(nèi)容,如需獲取更多的行業(yè)信息,可以關(guān)注我們的行業(yè)資訊欄目。


文章標(biāo)題:MySQL的變量類別及作用
網(wǎng)頁(yè)地址:http://weahome.cn/article/gosoeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部