当 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 ...
随机推荐
- UiPath循环活动For Each的介绍和使用
一.For Each的介绍 For Each:循环迭代一个列表.数组.或其他类型的集合, 可以遍历并分别处理每条信息 二.For Each在UiPath中的使用 1. 打开设计器,在设计库中新建一个 ...
- Linux 无法启动vmmon的问题[主要出现于Arch系]
Vmmon module not loaded 使用如下命令加载模块 # modprobe -a vmw_vmci vmmon 可能会出现modprobe: WARNING: Module vmmon ...
- hive SQL 初学者题目,实战题目 字符串函数,日期拼接,开窗函数。。。。
sql:Hive实现按照指定格式输出每七天的消费平均数输出格式:2018-06-01~2018-06-07 12.29...2018-08-10~2018-08-16 80.67 答案:-- 1.先将 ...
- 【破解】设置 Codesys for Raspberry 每118分钟自动重启Runtime
Codesys for Raspberry 无授权时,试用2小时后会自动退出,重启Runtime后就又恢复2小时试用时长. 官网授权购买地址: [单核] https://store.codesys.c ...
- CF1703A YES or YES? 题解
题意:输入一个长度为 \(3\) 的字符串,判断其是否为 \(YES\),忽略大小写. 做法:输入字符串,直接判断. #include<cstdio> #include<iostre ...
- lombok的常用注解
出处: https://blog.csdn.net/sunnyzyq/article/details/119992746 1. @Accessors 源码 我们打开 @Accessors 的源码可以看 ...
- StringBuilder的原理
StringBuilder类 字符串拼接问题 由于String类的对象内容不可改变,所以每当进行字符串拼接的时候,总是会在内存中创建一个新的对象.例如: class Test{ public stat ...
- linux学习随笔2之防火墙
centos7默认使用的防火墙是firewalld 查看所有打开的端口: firewall-cmd --zone=public --list-ports 更新防火墙规则: firewall-cmd - ...
- Java8新特性: CompletableFuture详解
CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步回调.流式处理.多个Future组合处理的能力,使Java在处理多任务的 ...
- AtCoder Educational DP Contest 总结
前言 感觉都初一升初二了,再做这个题是不是有点太菜了啊-- 里面大概都是些 DP 板子题(确信,题目质量还挺高的,不过不涉及太难的优化(实际上只有最后一题是斜率优化). 不管了,还是写个 blog 来 ...