91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL的變量類別及作用

發布時間:2020-05-09 10:15:37 來源:億速云 閱讀:179 作者:三月 欄目:MySQL數據庫

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

MySQL 的變量分為四種: 局部變量 、 用戶變量 、 會話變量 和 全局變量 ,其中局部變量只存在于函數和存儲過程,這里不多了解。其中 會話變量 和 全局變量 在 MySQL 中統稱為 系統變量 。

用戶變量

基本

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

SET 方式

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

SELECT 方式

# 必須 :=
SELECT @variable := expr

用戶變量定義備注:

  1. 未定義變量的初始值為 null(可不定義變量直接使用,不會報錯)

  2. 變量名對大小寫不敏感

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

  4. 調用用戶變量的表達式的計算順序實際上是未定義的,如 SELECT @a = 0, @a := @a + 1;,兩列都可能是 0 。

  5. 為用戶變量賦值時,會先確定表達式的值。如何理解,請看如下代碼:

    SET @m = 0;
    SET @m = 3, @n = @m;
    SELECT @n; # 0
  6. 雖然用戶變量的類型可以動態修改,但不建議這么操作,因為在交接代碼的時候你可能會有生命危險: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
) m
WHERE 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的變量類別及作用這篇文章后,很多讀者朋友肯定會想要了解更多的相關內容,如需獲取更多的行業信息,可以關注我們的行業資訊欄目。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赣州市| 义马市| 海南省| 宝山区| 西林县| 银川市| 读书| 太白县| 隆林| 岳池县| 芦溪县| 鱼台县| 丹巴县| 利辛县| 林甸县| 墨脱县| 临沭县| 年辖:市辖区| 随州市| 克山县| 江达县| 莱西市| 昌都县| 德清县| 祥云县| 迁西县| 淮北市| 屏东市| 武宁县| 无为县| 余姚市| 寿阳县| 遂平县| 五家渠市| 东辽县| 泰宁县| 永济市| 太保市| 梅河口市| 青田县| 赞皇县|