佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > MySQL 自定義變量的概念及特點(diǎn)

MySQL 自定義變量的概念及特點(diǎn)

熱門標(biāo)簽:AI電銷 鐵路電話系統(tǒng) 地方門戶網(wǎng)站 呼叫中心市場需求 網(wǎng)站排名優(yōu)化 服務(wù)外包 Linux服務(wù)器 百度競價排名

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 自定義變量很強(qiáng)大,但是也需要知道自定義變量本身也是有缺陷的,這些缺陷包括:

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

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

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

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

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

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

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

您可能感興趣的文章:
  • MySQL中使用自定義變量 編寫偷懶的UNION示例
  • 理解MySQL查詢優(yōu)化處理過程
  • mysql查詢優(yōu)化之100萬條數(shù)據(jù)的一張表優(yōu)化方案
  • 詳解MySQL 聯(lián)合查詢優(yōu)化機(jī)制
  • MySQL查詢優(yōu)化之查詢慢原因和解決技巧
  • MySQL之select in 子查詢優(yōu)化的實(shí)現(xiàn)
  • Mysql慢查詢優(yōu)化方法及優(yōu)化原則
  • 30個mysql千萬級大數(shù)據(jù)SQL查詢優(yōu)化技巧詳解
  • mysql大數(shù)據(jù)查詢優(yōu)化經(jīng)驗(yàn)分享(推薦)
  • MySQL百萬級數(shù)據(jù)分頁查詢優(yōu)化方案
  • MySQL 使用自定義變量進(jìn)行查詢優(yōu)化

標(biāo)簽:衡水 湘潭 崇左 黃山 仙桃 湖南 銅川 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL 自定義變量的概念及特點(diǎn)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    林口县| 宁明县| 宾阳县| 英德市| 喜德县| 麻阳| 工布江达县| 务川| 临邑县| 南皮县| 庆云县| 邢台市| 凯里市| 汝阳县| 吉隆县| 明光市| 兴义市| 武强县| 手游| 肥东县| 南召县| 台江县| 阆中市| 孟州市| 平南县| 潼南县| 和平县| 西宁市| 镇雄县| 阜康市| 海淀区| 扎囊县| 和平县| 周宁县| 霍林郭勒市| 微博| 岑溪市| 门头沟区| 定远县| 嘉祥县| 祁阳县|