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

解析MySQL中DELETE語句中別名的使用

 更新時(shí)間:2023年11月23日 09:06:54   作者:愛可生開源社區(qū)  
這篇文章主要為大家介紹了MySQL中DELETE語句中別名的使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

某天,正按照業(yè)務(wù)的要求刪除不需要的數(shù)據(jù),在執(zhí)行 DELETE 語句時(shí),竟然出現(xiàn)了報(bào)錯(cuò)(MySQL 數(shù)據(jù)庫(kù)版本 5.7.34):

mysql> delete from test1 t1 where not exists (select 1 from test2 t2 where t1.id=t2.id);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't1 where not exists (select 1 from test2 t2 where t1.id=t2.id)' at line 1

這就有點(diǎn)奇怪了,因?yàn)槲以趫?zhí)行刪除語句之前,執(zhí)行過同樣條件的 SELECT 語句,只是把其中的 select * 換成了 delete 而已,畢竟這個(gè)語法的報(bào)錯(cuò)一般來說原因很大可能是 關(guān)鍵字拼寫錯(cuò)誤 或者 存在中文符號(hào)。

排除了上面的原因后,再?gòu)恼Z句本身的邏輯來排查,難道說 DELETE 語句不支持 not exists 這種寫法?好像之前也沒聽說過這個(gè)限制。我們還是以語法錯(cuò)誤這個(gè)原因?yàn)槠瘘c(diǎn),去查查官方文檔看下能不能找出答案。

分析

DELETE 的語法如下

5.7 單表刪除格式

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

仔細(xì)對(duì)比了以下,發(fā)現(xiàn)了一些端倪,這里的語法并沒有寫出表名的別名用法,難道是使用了別名的原因?

mysql> delete from test1 where not exists (select 1 from test2 where test1.id=test2.id);
Query OK, 1 row affected (0.00 sec)

經(jīng)測(cè)試去掉了別名還真的執(zhí)行成功了,但我印象中之前刪除數(shù)據(jù)的時(shí)候用過別名,于是我再繼續(xù)深挖文檔查查看。

對(duì)比不同地方和不同版本的格式差異后,我終于明白了問題的起因。在不同版本,甚至不同情況下都有差異。

8.0 單表刪除格式

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

5.7 和 8.0 多表刪除格式

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]

經(jīng)過上面語法對(duì)比的不同發(fā)現(xiàn),5.7 的單表刪除確實(shí)不支持別名的使用,但是多表刪除卻支持(table_references 里包含別名的使用)。

并且在 8.0.16 開始,單表刪除已經(jīng)支持使用別名了。

For consistency with the SQL standard and other RDBMS, table aliases are now supported in single-table as well as multi-table DELETE statements. (Bug #27455809)

結(jié)論

  • MySQL 5.7 使用單表刪除語句時(shí),不能使用別名,多表刪除可以使用別名。
  • MySQL 8.0.16 開始單表多表都可以使用別名。

以上就是解析MySQL中DELETE語句中別名的使用的詳細(xì)內(nèi)容,更多關(guān)于MySQL DELETE語句別名的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL回表產(chǎn)生的原因和場(chǎng)景

    MySQL回表產(chǎn)生的原因和場(chǎng)景

    在MySQL數(shù)據(jù)庫(kù)中,回表(Look Up)指的是在進(jìn)行索引查詢時(shí),首先通過索引定位到對(duì)應(yīng)頁(yè),然后再根據(jù)行的物理地址找到所需的數(shù)據(jù)行,本文給大家介紹了MySQL回表是什么以及哪些情況下會(huì)回表,需要的朋友可以參考下
    2023-11-11
  • mysql存儲(chǔ)過程基礎(chǔ)之遍歷多表記錄后插入第三方表中詳解

    mysql存儲(chǔ)過程基礎(chǔ)之遍歷多表記錄后插入第三方表中詳解

    這篇文章主要給大家介紹了關(guān)于mysql存儲(chǔ)過程教程之遍歷多表記錄后插入第三方表中的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-07-07
  • mysql中的臨時(shí)表如何使用

    mysql中的臨時(shí)表如何使用

    這篇文章主要介紹了mysql中的臨時(shí)表如何使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MySQL數(shù)據(jù)庫(kù)約束詳解

    MySQL數(shù)據(jù)庫(kù)約束詳解

    mysql常見約束有:1、非空約束“not?null”;2、唯一性約束“unique”;3、主鍵約束“primary?key”;4、外鍵約束“foreign?key”;5、默認(rèn)值約束“Default”等等。
    2022-10-10
  • MySql Installer 8.0.18可視化安裝教程圖文詳解

    MySql Installer 8.0.18可視化安裝教程圖文詳解

    這篇文章主要介紹了MySql Installer 8.0.18可視化安裝教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • InnoDB引擎中的事務(wù)詳解

    InnoDB引擎中的事務(wù)詳解

    這篇文章主要介紹了InnoDB引擎中的事務(wù)詳解,事務(wù)Transaction是訪問和更新數(shù)據(jù)庫(kù)的程序執(zhí)行單元;事務(wù)中可能包含一個(gè)或多個(gè)sql語句,這些語句要么都執(zhí)行,要么都不執(zhí)行,需要的朋友可以參考下
    2023-09-09
  • MySQL 聚合查詢 和 分組查詢示例詳解

    MySQL 聚合查詢 和 分組查詢示例詳解

    聚合查詢是SQL中對(duì)數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì)的操作,可以將多行數(shù)據(jù)按照特定條件合并計(jì)算,返回匯總結(jié)果,本文通過實(shí)例代碼講解MySQL聚合查詢和 分組查詢,感興趣的朋友一起看看吧
    2025-04-04
  • mysql中替代null的IFNULL()與COALESCE()函數(shù)詳解

    mysql中替代null的IFNULL()與COALESCE()函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于mysql中替代null的IFNULL()與COALESCE()函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看看吧。
    2017-06-06
  • MySQL日志機(jī)制深度解析

    MySQL日志機(jī)制深度解析

    MySQL的日志機(jī)制是保障數(shù)據(jù)可靠性、支持故障恢復(fù)、排查性能問題的核心組件,本文給大家介紹MySQL日志機(jī)制解析,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • MySQL分庫(kù)分表詳情

    MySQL分庫(kù)分表詳情

    互聯(lián)網(wǎng)項(xiàng)目中常用到的關(guān)系型數(shù)據(jù)庫(kù)是MySQL,隨著用戶和業(yè)務(wù)的增長(zhǎng),傳統(tǒng)的單庫(kù)單表模式難以滿足大量的業(yè)務(wù)數(shù)據(jù)存儲(chǔ)以及查詢,單庫(kù)單表中大量的數(shù)據(jù)會(huì)使寫入、查詢效率非常之慢,此時(shí)應(yīng)該采取分庫(kù)分表策略來解決。本篇文章主要介紹MySQL分庫(kù)分表,需要的朋友可以參考一下
    2021-09-09

最新評(píng)論

科技| 嵊泗县| 同江市| 文登市| 刚察县| 德令哈市| 新密市| 洛阳市| 行唐县| 肥西县| 三原县| 长垣县| 景宁| 新田县| 天津市| 闻喜县| 巴彦淖尔市| 江达县| 鹿泉市| 开鲁县| 孝义市| 原阳县| 虞城县| 禹城市| 新化县| 都昌县| 江陵县| 鹿邑县| 江北区| 洱源县| 建阳市| 平利县| 南阳市| 竹溪县| 满洲里市| 平邑县| 阿勒泰市| 广元市| 丹江口市| 郑州市| 县级市|