最近做的需求經常和數據庫在打交道, 因為系統頁面上某些展示的字段並不是在前端寫死的, 而是配置在數據庫中, 這樣的話便於維護和擴展. 於是遇到了一個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 直接來加上這個別名.