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

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

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

背景

某天,正按照業(yè)務的要求刪除不需要的數(shù)據(jù),在執(zhí)行 DELETE 語句時,竟然出現(xiàn)了報錯(MySQL 數(shù)據(jù)庫版本 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

這就有點奇怪了,因為我在執(zhí)行刪除語句之前,執(zhí)行過同樣條件的 SELECT 語句,只是把其中的 select * 換成了 delete 而已,畢竟這個語法的報錯一般來說原因很大可能是 關鍵字拼寫錯誤 或者 存在中文符號。

排除了上面的原因后,再從語句本身的邏輯來排查,難道說 DELETE 語句不支持 not exists 這種寫法?好像之前也沒聽說過這個限制。我們還是以語法錯誤這個原因為起點,去查查官方文檔看下能不能找出答案。

分析

DELETE 的語法如下

5.7 單表刪除格式

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

仔細對比了以下,發(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)測試去掉了別名還真的執(zhí)行成功了,但我印象中之前刪除數(shù)據(jù)的時候用過別名,于是我再繼續(xù)深挖文檔查查看。

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

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)過上面語法對比的不同發(fā)現(xiàn),5.7 的單表刪除確實不支持別名的使用,但是多表刪除卻支持(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 使用單表刪除語句時,不能使用別名,多表刪除可以使用別名。
  • MySQL 8.0.16 開始單表多表都可以使用別名。

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

相關文章

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

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

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

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

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

    mysql中的臨時表如何使用

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

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

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

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

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

    InnoDB引擎中的事務詳解

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

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

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

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

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

    MySQL日志機制深度解析

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

    MySQL分庫分表詳情

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

最新評論

大新县| 崇仁县| 拜泉县| 双城市| 望江县| 洞口县| 武山县| 仁怀市| 定远县| 乳源| 梧州市| 香格里拉县| 自贡市| 广州市| 凤台县| 扎赉特旗| 缙云县| 江口县| 通州市| 三台县| 通州区| 萨嘎县| 调兵山市| 晋州市| 洛扎县| 新乡县| 普兰店市| 剑阁县| 元朗区| 句容市| 平原县| 四子王旗| 龙山县| 云龙县| 彰化市| 兴和县| 五河县| 庐江县| 河源市| 苍山县| 莫力|