當 SQL DELETE 邂逅 Table aliases,會擦出怎樣的火花

開心一刻

  晚上,女兒眼噙淚水躺在牀上

  女兒:你口口聲聲說愛我,說陪我,卻天天想着騙我零花錢,你是我親爹嗎?

  我:你想知道真相

  女兒:想!

  我:那你先給爸爸兩百塊錢!

環境準備

  MySQL 不同版本

  利用 docker 搭建了 7 個不同版本的 MySQL 

   5.5.62 

   5.6.51 

   5.7.36 

   8.0.15 

   8.0.16 

   8.0.17 

   8.0.30 

    當下最新版本

  庫與表

Table aliases

  關於表別名,相信大家都不陌生;指定表別名是爲了簡化 SQL ,使可讀性更強

  語法如下

   AS 可以省略

  應用到 tbl_user 上則是

  不僅表可以指定別名,列也可以指定別名,這裏就不展開了

DELETE

  對於 DELETE ,相信大家已經非常熟悉了

  單表語法如下

  多表語法如下

DELETE + Table aliases

   SELECT 的時候,我們經常用表的別名

  單表查詢的時候

  尤其是在連表查詢的時候

  那麼 DELETE 的時候可以用別名嗎,我們來試試

  單表刪除

  通常情況下,刪除語句這麼寫的

  如果加上別名了,該怎麼寫

  可能大家覺得很簡單,樓主也覺得是如下這麼寫的

  很有可能執行報錯,提示如下信息

  我們來看下在 MySQL 各個版本的執行情況

  可以看到,在 8.0.16 之前是會報錯的

  那 8.0.16 之前的正確寫法應該是怎樣的了,如下所示

  當然, 8.0.16 及之後也是支持這兩種寫法的

  也許是因爲呼聲太高,從 8.0.16 開始支持如下寫法

  官方說明delete

  連表刪除

  和單表刪除基本一致,語法格式如下

 

   刪除 zhangsan 的登錄日誌,可以這麼寫

   8.0.16 及之後是不是還可以這麼寫?

  大家去試試,然後想想爲什麼

總結

  1、單表刪除的時候就別用別名了, SQL 更精簡

  2、如果要用別名,推薦用如下其中一種

    更具通用性,方便遷移,而

    需要 8.0.16 及之後版本才支持

  3、連表刪除的最後那個問題,大家可以從 從哪些表刪除 來思考,對比下官方給的案例

    應該就能想到答案了

參考

  DELETE Statement

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章