当前位置: 首页 > news >正文

做公司子网站的请示报告天津提升专业关键词排名

做公司子网站的请示报告,天津提升专业关键词排名,qq推广群,企业网站建设的核心是某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错! 作者:林靖华,开源数据库技术爱好者,擅长MySQL和Redis的运维 爱可生开源社区出品,原创内容未经授权不…

某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错!

作者:林靖华,开源数据库技术爱好者,擅长MySQL和Redis的运维

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 650 字,预计阅读需要 2 分钟。

背景

某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错(MySQL 数据库版本 5.7.34):

mysql> delete from test1 t1 where not exists (select 1 from test2 t2 where t1.id=t2.id);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't1 where not exists (select 1 from test2 t2 where t1.id=t2.id)' at line 1

这就有点奇怪了,因为我在执行删除语句之前,执行过同样条件的 SELECT 语句,只是把其中的 select * 换成了 delete 而已,毕竟这个语法的报错一般来说原因很大可能是 关键字拼写错误 或者 存在中文符号

排除了上面的原因后,再从语句本身的逻辑来排查,难道说 DELETE 语句不支持 not exists 这种写法?好像之前也没听说过这个限制。我们还是以语法错误这个原因为起点,去查查官方文档看下能不能找出答案。

分析

DELETE 的语法如下:

5.7 单表删除格式

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[PARTITION (partition_name [, partition_name] ...)][WHERE where_condition][ORDER BY ...][LIMIT row_count]

仔细对比了以下,发现了一些端倪,这里的语法并没有写出表名的别名用法,难道是使用了别名的原因?

mysql> delete from test1 where not exists (select 1 from test2 where test1.id=test2.id);
Query OK, 1 row affected (0.00 sec)

经测试去掉了别名还真的执行成功了,但我印象中之前删除数据的时候用过别名,于是我再继续深挖文档查查看。

对比不同地方和不同版本的格式差异后,我终于明白了问题的起因。在不同版本,甚至不同情况下都有差异。

8.0 单表删除格式

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias][PARTITION (partition_name [, partition_name] ...)][WHERE where_condition][ORDER BY ...][LIMIT row_count]

5.7 和 8.0 多表删除格式

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]tbl_name[.*] [, tbl_name[.*]] ...FROM table_references[WHERE where_condition]DELETE [LOW_PRIORITY] [QUICK] [IGNORE]FROM tbl_name[.*] [, tbl_name[.*]] ...USING table_references[WHERE where_condition]

经过上面语法对比的不同发现,5.7 的单表删除确实不支持别名的使用,但是多表删除却支持(table_references 里包含别名的使用)。

并且在 8.0.16 开始,单表删除已经支持使用别名了。

For consistency with the SQL standard and other RDBMS, table aliases are now supported in single-table as well as multi-table DELETE statements. (Bug #27455809)

结论

  • MySQL 5.7 使用单表删除语句时,不能使用别名,多表删除可以使用别名。
  • MySQL 8.0.16 开始单表多表都可以使用别名。

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
http://www.khdw.cn/news/57314.html

相关文章:

  • 做网站公司 营销合肥网站seo费用
  • 德州北京网站建设交换链接案例
  • 旅游门户网站有哪些文娱热搜榜
  • 网站怎么维护推客平台
  • 武汉网站建设公司多少钱中国新闻最新消息
  • 河北网站设计成功柚米科技职业培训机构
  • 淘宝直接怎么做网站网站seo百度百科
  • 百度云服务器做php网站营销课程培训哪个机构好
  • 用路由器做网站网站报价
  • 网站关键词怎么做排名靠前广告公司接单软件
  • wordpress 网站教程网站排名推广推荐
  • 电子商务网站建设所需要的经费百度app下载并安装
  • 纯flash网站下载广州百度推广客服电话多少
  • 网站建设与管理 ppt怎么弄一个网站
  • 阿里网站制作需要多少钱东莞百度推广优化公司
  • 网站建设公司怎么样play商店
  • 成都个人学做网站全国疫情一览表
  • 政府网站如何建立今日头条(官方版本)
  • 俄文网站建设 俄文网站设计推广平台有哪些渠道
  • 网站显示速度的代码企业seo排名哪家好
  • 兰州最好的网站建设公司手机网站seo免费软件
  • 镇江网站建设推广公司百度一下你就知道网页
  • 自己做图网站小吃培训2000元学6项
  • 服饰 视频 网站建设网站展示型推广
  • 无极网站赌博涉案多少人被抓百度识图搜索引擎
  • wordpress点击客服优化网站推广教程整站
  • 自己做的网站突然打不开seo白帽优化
  • 德阳企业网站建设百度站长平台
  • 宽屏大气网站源码目前引流最好的app
  • 营销网站如何实现差异化新网店怎么免费推广