最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 自定義變量的概念及特點

 更新時間:2021年05月13日 10:22:54   作者:島上碼農(nóng)  
MySQL 是可以自定義臨時變量的,而臨時變量在做查詢優(yōu)化和靜態(tài)查詢分析時十分有用。而實際上很少有人記得 MySQL 的自定義變量。本篇文章講述 MySQL 的自定義變量的概念及特點。

MySQL 的自定義 就是存儲值的臨時容器,只要與服務(wù)端的連接是活躍的,容器中的值可以保存和使用??梢酝ㄟ^簡單的 SET 或 SELECT語句 設(shè)置自定義變量,如下所示:

SET @one := 1;
SET @min_actor := (SELECT MIN(actor_id) FROM sakila.actor);
SET @last_week := CURRENT_DATE-INTERNAL 1 WEEK;

定義好變量后,就可以在 SQL 語句中使用這個變量:

SELECT * FROM film WHERE created_date <= @last_week;

雖然 MySQL 自定義變量很強大,但是也需要知道自定義變量本身也是有缺陷的,這些缺陷包括:

  • 自定義變量會禁用查詢緩存。
  • 不可以用做替代語義上的標(biāo)識符,例如表名稱或列名稱,或者是在 LIMIT 子句中使用。
  • 自定義變量是基于單次連接的,因此不可以跨連接使用。
  • 如果使用連接池或持久連接,自定義變量會導(dǎo)致你的代碼與交互隔離,這出現(xiàn)的時候可能是代碼的 bug 或連接池的 bug,但是是可能發(fā)生的。
  • 在 MySQL 5.0以前的版本中是大小寫敏感的,因此要注意(在 MySQL 5.0以后已經(jīng)不區(qū)分大小寫了)。
  • 無法顯示地指定變量類型,而實際變量的類型依賴于不確定的類型推斷,并且不同的版本會有差異,最好的方式是在一開始定義的時候指定類型,比如使用0設(shè)定整數(shù)變量,0.0設(shè)定浮點數(shù)變量,''用于字符串。但是如果后面指定了新的值,類型會跟隨新的值改變,這是因為 MySQL 的自定義變量的類型是動態(tài)的。
  • 優(yōu)化器在某些情況下有可能會將自定義變量優(yōu)化掉,導(dǎo)致無法按照期望的方式進(jìn)行查詢。
  • 賦值的次序,甚至包括賦值的時間都是不確定的,這取決于優(yōu)化器選擇的查詢計劃。因此,最終的結(jié)果可能讓人困惑。
  • 賦值操作符的優(yōu)先級低于任何其他操作符,因此必須顯示地使用括號。
  • 未定義變量不會報錯,這很容導(dǎo)致錯誤出現(xiàn)。

自定義變量可以用在所有類型的語句中,而不僅僅是 SELECT 語句。事實上,這是自定義變量的一個最大的優(yōu)勢。例如,我們可以重寫復(fù)雜的查詢,例如利用子查詢進(jìn)行排序的計算,或者是完成一次低代價的UPDATE 語句。

有些時候,優(yōu)化器會認(rèn)為這個變量是編譯時常量而不進(jìn)行賦值,這會導(dǎo)致期望的行為很怪異。而將自定義變量的賦值放入類似 LEAST函數(shù)中通常會避免這個問題。另一個方式是在使用之前檢查一下自定義變量是否有值。有時候你想這樣做,但有些時候你不想這么做。

通過一些小的實驗,我們可以使用自定義變量做很多有趣的事情,例如:

  • 計算總量和平均值;
  • 對于分組查詢模擬 FIRST 和 LAST 函數(shù);
  • 對于很大的數(shù)做數(shù)學(xué)運算;
  • 將一整張表轉(zhuǎn)換成 MD5哈希值;
  • 過濾掉0值附近但超過設(shè)定邊界的樣本值;
  • 模擬讀寫指針位置;
  • 將變量嵌入到 WHERE 條件并在 SHOW 語句中顯示。

自定義變量在某些應(yīng)用場合很有用,例如統(tǒng)計出現(xiàn)次數(shù)的排序值,計算更新和插入相同數(shù)據(jù)的次數(shù),以及延遲的聯(lián)合查詢,下一篇文章將介紹具體的用法。

以上就是MySQL 的自定義變量的概念及特點的詳細(xì)內(nèi)容,更多關(guān)于MySQL 自定義變量的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL InnoDB表空間加密示例詳解

    MySQL InnoDB表空間加密示例詳解

    這篇文章主要給大家介紹了關(guān)于MySQL InnoDB表空間加密的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • MYSQL中SWITCH語句和循環(huán)語句舉例詳解

    MYSQL中SWITCH語句和循環(huán)語句舉例詳解

    MySQL提供了多種循環(huán)語句來實現(xiàn)循環(huán)操作,其中包括while循環(huán)、loop循環(huán)、repeat循環(huán)和非標(biāo)準(zhǔn)的goto循環(huán),下面這篇文章主要給大家介紹了關(guān)于MYSQL中SWITCH語句和循環(huán)語句的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • mysql的查詢緩存說明

    mysql的查詢緩存說明

    mysql的Query Cache有其特殊的業(yè)務(wù)場景,也不像其他數(shù)據(jù)庫產(chǎn)品,緩存查詢語句的執(zhí)行計劃等信息,而是直接緩存查詢語句的記錄集和對應(yīng)的SQL語句
    2013-02-02
  • mysql大批量插入數(shù)據(jù)的正確解決方法

    mysql大批量插入數(shù)據(jù)的正確解決方法

    這篇文章主要介紹了mysql大批量插入數(shù)據(jù)的正確做法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • MySQL主從復(fù)制原理與配置

    MySQL主從復(fù)制原理與配置

    主從備份是數(shù)據(jù)庫高可用性方案的一種,通過配置主服務(wù)器和從服務(wù)器來實現(xiàn)數(shù)據(jù)同步,主庫將操作寫入binlog,從庫讀取后復(fù)制數(shù)據(jù),保持一致性,配置包括修改my.cnf文件、重啟數(shù)據(jù)庫、建立連接等步驟,完成后,可以通過特定命令查看從服務(wù)器狀態(tài),確保同步成功
    2024-10-10
  • MySQL中一些優(yōu)化straight_join技巧

    MySQL中一些優(yōu)化straight_join技巧

    這篇文章主要介紹了MySQL中一些優(yōu)化straight_join技巧,作者通過用戶的實際案例分析,需要的朋友可以參考下
    2015-05-05
  • MySQL基本操作語句小結(jié)

    MySQL基本操作語句小結(jié)

    這篇文章主要介紹了MySQL的基本操作語句,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-07-07
  • MySQL OOM 系列一 Linux內(nèi)存分配

    MySQL OOM 系列一 Linux內(nèi)存分配

    今天想提到的是線上一個4G的RDS實例,發(fā)生了OOM(out of memory)的問題,MySQL進(jìn)程被直接Kill掉了。在解釋這個問題的時候,我們首先需要從Linux系統(tǒng)內(nèi)存分配策略講起
    2016-07-07
  • Can''t connect to MySQL server的解決辦法

    Can''t connect to MySQL server的解決辦法

    ERROR 2003 (HY000): Can't connect to MySQL server on '*.*.*.*' (113)的解決辦法
    2010-06-06
  • mysql自增navicat_navicat如何設(shè)置主鍵自增

    mysql自增navicat_navicat如何設(shè)置主鍵自增

    通過Navicat設(shè)置MySQL表的主鍵自增,步驟包括:打開Navicat連接數(shù)據(jù)庫,選擇表并設(shè)計,右擊id字段設(shè)置為主鍵,然后勾選自動遞增功能,這樣每次插入新記錄時,id字段都會自動遞增
    2025-01-01

最新評論

诸暨市| 山东| 芦山县| 宜兰市| 安溪县| 鸡西市| 桓仁| 龙南县| 平陆县| 祁阳县| 且末县| 定远县| 犍为县| 寿阳县| 大竹县| 饶阳县| 东山县| 佛学| 敖汉旗| 通海县| 阿拉善盟| 丘北县| 九龙坡区| 皋兰县| 名山县| 阿勒泰市| 金堂县| 江陵县| 札达县| 桑植县| 武宣县| 宁陕县| 正阳县| 迁西县| 建瓯市| 昂仁县| 九龙坡区| 涞水县| 慈利县| 衡山县| 靖西县|