草庐IT

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

青石路 2023-03-28 原文

开心一刻

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

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

  我:你想知道真相?

  女儿:想!

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

环境准备

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

    应该就能想到答案了

参考

  DELETE Statement

有关当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花的更多相关文章

  1. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  2. 怎样用一台手机做自媒体? - 2

    其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时

  3. ruby - 我怎样才能只写一次 "Text"并同时检查 path_info 是否包含 'A' ? - 2

    -if!request.path_info.include?'A'%{:id=>'A'}"Text"-else"Text"“文本”写了两次。我怎样才能只写一次并同时检查path_info是否包含“A”? 最佳答案 有两种方法可以做到这一点。使用部分,或使用content_forblock:如果“文本”较长,或者是一个重要的子树,您可以将其提取到一个部分。这会使您的代码变干一点。在给出的示例中,这似乎有点矫枉过正。在这种情况下更好的方法是使用content_forblock,如下所示:-if!request.path_info.inc

  4. ruby-on-rails - rspec - 我怎样才能让 "pendings"有我的文本而不仅仅是 "No reason given" - 2

    我有这个代码:context"Visitingtheusers#indexpage."dobefore(:each){visitusers_path}subject{page}pending('iii'){shouldhave_no_css('table#users')}pending{shouldhavecontent('Youhavereachedthispageduetoapermissionic错误')}它会导致几个待处理,例如ManagingUsersGivenapractitionerloggedin.Visitingtheusers#indexpage.#Noreason

  5. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  6. Ruby:我怎样才能复制这个数组? - 2

    (跟进我之前的问题,Ruby:howcanIcopyavariablewithoutpointingtothesameobject?)我正在编写一个简单的Ruby程序来在.svg文件中进行一些替换。第一步是从文件中提取信息并将其放入数组中。为了避免每次调用此函数时都从磁盘读取文件,我尝试使用memoize设计模式-在第一次调用后的每次调用中都使用缓存结果。为此,我使用了一个在函数之前定义的全局变量。但是,即使我在返回局部变量之前将该变量.dup为局部变量,调用该变量的函数仍在修改全局变量。这是我的实际代码:#memoizetokeepfromhavingtoreadoriginalfi

  7. ruby - 我怎样才能让一个字段更新/更改另一个字段? - 2

    我想让字段由另一个字段解析。我有一个根据一些参数生成的列表,想更新总字段我的方法可能不正确。显然,我试图避免重新运行相同的数据库查询并在查询字符串中向上传递一个级别的过滤器。因此假设我的查询使用以下ruby​​类型:Types::PostListType=GraphQL::ObjectType.definedoname'PostList'field:total,!types.Int,default_value:0#(user,*_args){posts=function_to_filter(args[:filter])#howdoIupdatetotalwithposts.counth

  8. ruby-on-rails - 在处理电子邮件回复时,我怎样才能忽略任何电子邮件客户端细节和历史记录? - 2

    我有一个通过IMAP处理传入电子邮件的Rails应用程序。当前使用一种方法来搜索TMail对象的各个部分以查找给定的content_type:defself.search_parts_for_content_type(parts,content_type='text/html')parts.eachdo|part|ifpart.content_type==content_typereturnpart.bodyelseifpart.multipart?ifbody=self.search_parts_for_content_type(part.parts,content_type)ret

  9. ruby - 我怎样才能将这段代码转换为元编程,这样我就可以停止复制它了? - 2

    我有一个用于building.netsystemswithruby/rake的小但不断增长的框架,我已经研究了一段时间了。在此代码库中,我有以下内容:require'rake/tasklib'defassemblyinfo(name=:assemblyinfo,*args,&block)Albacore::AssemblyInfoTask.new(name,*args,&block)endmoduleAlbacoreclassAssemblyInfoTask此代码遵循的模式在框架中重复了大约20次。每个版本的区别在于正在创建/调用的类的名称(而不是AssemblyInfoTask,它可

  10. ruby - 我怎样才能加快 Ruby/Rake 任务 - 2

    rake--tasks运行大约需要18秒。这只是加载所有任务所需的时间,因此我定义的任何任务都至少需要这段时间来运行:$timerake--tasksrakedb:clean#Cleaningupdatabaserakepassenger:restart#RestartApplicationrakespec#Runspecsreal0m18.816suser0m7.306ssys0m5.665s我的Rakefile:$::spec知道为什么rake需要很多次吗?谢谢 最佳答案 尝试spring命令行如下所示:springrake-T

随机推荐