开心一刻

  晚上,女儿眼噙泪水躺在床上

  女儿:你口口声声说爱我,说陪我,却天天想着骗我零花钱,你是我亲爹吗?

  我:你想知道真相

  女儿:想!

  我:那你先给爸爸两百块钱!

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

环境准备

  MySQL 不同版本

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

   5.5.62 

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   5.6.51 

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   5.7.36 

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   8.0.15 

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   8.0.16 

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   8.0.17 

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   8.0.30 

    当下最新版本

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  库与表

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

Table aliases

  关于表别名,相信大家都不陌生;指定表别名是为了简化 SQL ,使可读性更强

  语法如下

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   AS 可以省略

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  应用到 tbl_user 上则是

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  不仅表可以指定别名,列也可以指定别名,这里就不展开了

DELETE

  对于 DELETE ,相信大家已经非常熟悉了

  单表语法如下

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  多表语法如下

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

DELETE + Table aliases

   SELECT 的时候,我们经常用表的别名

  单表查询的时候

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  尤其是在连表查询的时候

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  那么 DELETE 的时候可以用别名吗,我们来试试

  单表删除

  通常情况下,删除语句这么写的

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  如果加上别名了,该怎么写

  可能大家觉得很简单,楼主也觉得是如下这么写的

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  很有可能执行报错,提示如下信息

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  我们来看下在 MySQL 各个版本的执行情况

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  可以看到,在 8.0.16 之前是会报错的

  那 8.0.16 之前的正确写法应该是怎样的了,如下所示

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  当然, 8.0.16 及之后也是支持这两种写法的

  也许是因为呼声太高,从 8.0.16 开始支持如下写法

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  官方说明delete

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  连表删除

  和单表删除基本一致,语法格式如下

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   删除 zhangsan 的登录日志,可以这么写

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

   8.0.16 及之后是不是还可以这么写?

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

  大家去试试,然后想想为什么

总结

  1、单表删除的时候就别用别名了, SQL 更精简

  2、如果要用别名,推荐用如下其中一种

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

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

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

    需要 8.0.16 及之后版本才支持

  3、连表删除的最后那个问题,大家可以从 从哪些表删除 来思考,对比下官方给的案例

当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花-LMLPHP

    应该就能想到答案了

参考

  DELETE Statement

09-13 09:31