当 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、连表删除的最后那个问题,大家可以从 从哪些表删除 来思考,对比下官方给的案例

应该就能想到答案了
参考
当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花的更多相关文章
- 小程序与WebRTC联姻能擦出怎样的火花?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯视频云终端团队发表于云+社区专栏 腾讯视频云终端技术总监,rexchang(常青), 2008 年毕业加入腾讯,一直从事客户端研发 ...
- [置顶]
Android 关于BottomDialogSheet 与Layout擦出爱的火花?
今天上班做那个类似于ios拍照的那种效果图 就是个垂直布局然后里面textview+分割线+textview+button 当然也可以用button+分割线+button 方法有很多,选择适合自己的就 ...
- Android 关于BottomDialogSheet 与Layout擦出爱的火花?
今天上班做那个相似于ios拍照的那种效果图 就是个垂直布局然后里面textview+切割线+textview+button 当然也能够用button+切割线+button 方法有非常多,选择适合自己的 ...
- 当Spring Cloud Alibaba Sentinel碰上Spring Cloud Sleuth会擦出怎样的火花
前言 今年主要会做一个比较完整的微服务项目开源出来.目前已经开始了,刚兴趣的先Star一个吧. 项目:https://github.com/yinjihuan/kitty-cloud 基础框架:htt ...
- Could not execute JDBC batch update; SQL [delete from role where roleId=?]; constraint [null]; neste
今天在写多个删除功能的时候出现了这么一个错误:意思是删除操作的时候,没有找到对应的外键. Cannot delete or update a parent row: a foreign key con ...
- SQL DELETE 语句详解
SQL DELETE 语句详解 DELETE 语句 DELETE 语句用于删除表中的行. 语法 DELETE FROM 表名称 WHERE 列名称 = 值 Person: LastName Fir ...
- SQL Server中Table字典数据的查询SQL示例代码
SQL Server中Table字典数据的查询SQL示例代码 前言 在数据库系统原理与设计(第3版)教科书中这样写道: 数据库包含4类数据: 1.用户数据 2.元数据 3.索引 4.应用元数据 其中, ...
- sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) Cannot add a NOT NULL column with default value NULL [SQL: u'ALTER TABLE address_scopes ADD COLUMN ip_version INTEGER NOT NULL']
root@hett-virtual-machine:~# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neu ...
- OpenStack安装keyston 错误BError: (pymysql.err.InternalError) (1071, u‘Specified key was too long; max key length is 767 bytes‘) [SQL: u‘\nCREATE TABLE migrate_ver
折腾了两天的错误,BError: (pymysql.err.InternalError) (1071, u‘Specified key was too long; max key length is ...
随机推荐
- Hdfs存储策略
一.磁盘选择策略 1.1.介绍 在HDFS中,所有的数据都是存在各个DataNode上的.而这些DataNode上的数据都是存放于节点机器上的各个目录中的,而一般每个目录我们会对应到1个独立的盘,以便 ...
- Timer和ScheduledThreadPoolExecutor的区别
Timer 基于单线程.系统时间实现的延时.定期任务执行类.具体可以看下面红色标注的代码. public class Timer { /** * The timer task queue. This ...
- 使用纯 CSS 实现超酷炫的粘性气泡效果
最近,在 CodePen 上看到这样一个非常有意思的效果: 这个效果的核心难点在于气泡的一种特殊融合效果. 其源代码在:CodePen Demo -- Goey footer,作者主要使用的是 SVG ...
- 《深入理解java虚拟机》读书笔记-第二章Java内存区域和内存溢出异常
java1.7和java8的jvm存在差异,本文先按照<深入理解java虚拟机>的讲解内容总结,并将java8的改变作为附录放在文末 一丶运行时数据区域 图:java虚拟机运行时数据区 ...
- 浅学hello world
Hello world 1.随便新建一个文件夹,存放代码 2.新建一个java文件 .后缀名为.java .Hello.java .[注意点]系统没显示后缀名的可以自己手动打开 3.编写代码 publ ...
- 没有编辑器时,使用echo更换源
echo "\ deb http://mirrors.aliyun.com/ubuntu/ xenial main deb-src http://mirrors.aliyun.com/ubu ...
- day02_基本语法
基本语法 学习目标: 1. 数据类型 2. 变量 3. 编码介绍 4. 标识符和关键字 5. 字符串类型 6. 数据类型转化 7. 进制转换 8. 运算符 一.数据类型 什么是数据类型? 在开发软件的 ...
- 在 macOS 上搭建 Flutter 开发环境
下载 Flutter SDK flutter官网下载:https://flutter.io/sdk-archive/#macos 若上述链接无法访问,可通过GitHub下载 https://githu ...
- .netcore 定制化项目开发的思考和实现
今年年初进了一家新公司,进入之后一边维护老项目一边了解项目流程,为了接下来的项目重做积累点经验. 先说下老项目吧,.net fx 3.5+oracle...... 在实际维护中逐渐发现,老项目有标准版 ...
- javascript原生style属性分析
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...