MySQL不支援DELETE使用表別名?

0109發表於2021-07-11

  最近做的需求經常和資料庫在打交道, 因為系統頁面上某些展示的欄位並不是在前端寫死的, 而是配置在資料庫中, 這樣的話便於維護和擴充套件. 於是遇到了一個MySQL中比較細節性的問題.

  日常開發中不少程式設計師認為MySQL不支援DELETE資料時使用別名, 之前我也是這麼認為的, 但是由於最近的需求中使用delete語句比較多, 欄位也比較多(取的欄位名是比較奇葩難記住的), 所以想著能不能在delete資料的時候使用別名, 這樣便於快速找到作為條件的欄位名. 於是搜了一下部落格, 發現好多部落格也是這樣寫的, 說MySQL資料庫delete資料時不支援使用表別名. 舉個例子 如下篇部落格:

 

 

 

  這裡先說一下我查完資料的結論, MySQL資料庫DELETE資料時是可以支援別名的, 只不過沒用對罷了.(溫馨提示一下: 遇到某個比較疑惑問題的時候, 看部落格記得多看幾篇, 因為你看的部落格有可能不正確, 如上圖)

開始驗證:(以下只是簡單舉例子, 實際開發中肯定比這個複雜一些)

現在我需要刪除掉聯絡人表中的記錄. 刪除的條件根據欄位(single_str_node_rule)來刪除的.

正常不使用別名時刪除:

DELETE FROM contact WHERE single_str_node_rule = 'cd269a75f541a45bb2ec3636c6e3648b';

OK, 這個語句沒有問題

 

 使用別名刪除時錯誤用法:

DELETE FROM contact c WHERE c.single_str_node_rule = 'bc33be06aa8937f4a0354b71eac0abcd';

報錯:

使用別名刪除正確用法:

DELETE c FROM contact c WHERE c.single_str_node_rule = 'bc33be06aa8937f4a0354b71eac0abcd';

OK, 刪除記錄成功

 

 

得出結論:

MySQL資料庫DELETE資料時是可以支援別名的. 只不過需要在DELETE 和 FROM 直接來加上這個別名.

 

 

 

相關文章