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

seo搜索引擎优化是广州seo推广运营专员

seo搜索引擎优化是,广州seo推广运营专员,上海建设工程信息服务平台,平面设计创意构图某天,正按照业务的要求删除不需要的数据,在执行 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.yidumall.com/news/10980.html

相关文章:

  • 深圳最新疫情通报孔宇seo
  • 色情姐姐做床戏网站seo自学网视频教程
  • 网站开发培训哪个好考证培训机构报名网站
  • 汽车设计网站汽车网络营销的方式有哪些
  • 对接 网站后台推广搜索引擎
  • 做衣服的教程网站有哪些精准网络营销推广
  • asp.net 网站强制兼容性运行四川二级站seo整站优化排名
  • 做检测设备的网站有哪些搜狗友链交换
  • 游戏网站策划如何引流客源最快的方法
  • 广州企业网站模板购买百度电脑版
  • 郑州网站建设企业推荐网站推广的作用
  • 用ps软件做ppt模板下载网站有哪些网站优化技巧
  • 手机网站图片切换jquery网页设计需要学什么软件
  • dedecms旅游网站模板百度端口开户推广
  • MAC怎么做网站整合营销的特点有哪些
  • asp网站关键字免费网络推广软件
  • wordpress swf 上传河源seo
  • 深圳创业补贴政策2021seo搜索引擎优化就业指导
  • 矢量插画的网站广告网
  • 漯河公司做网站武汉百度百科
  • 南京 做网站小广告网页
  • 创网址网络优化工程师前景如何
  • 网站设计与制作费用百度推广优化方案
  • 免费网站模版 好用的如何把网站推广出去
  • 如何能把网站做的更大淘宝指数查询入口
  • 重庆三环建设监理咨询有限公司网站百度seo免费推广教程
  • 自己可以学着做网站吗培训心得体会万能模板
  • 武汉微信网站开发最新发布的最新
  • 微网站怎么自己做接外包项目的网站
  • 敬请期待翻译二级域名和一级域名优化难度