前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL审核 | SQLE 兼容 MySQL 8.0 测评

SQL审核 | SQLE 兼容 MySQL 8.0 测评

作者头像
爱可生开源社区
发布2022-05-23 08:54:59
1.4K0
发布2022-05-23 08:54:59
举报
文章被收录于专栏:爱可生开源社区

作者:任仲禹

爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。

本文来源:原创投稿

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

目录

  • 前⾔
  • DDL语句审核
  • DCL语句审核
  • DML语句审核
  • DDL与DML上下⽂关联
  • 结论

前⾔

SQLE 是由爱可⽣开发并开源、⽀持SQL审核、标准化上线流程等丰富功能的可扩展SQL审核⼯具(https://github.com/actiontech/sqle);⽬前⼤部分 MySQL 业务使⽤场景以5.7版本为主,今天本⽂来验证下 SQLE 对 MySQL 8.0 的⽀持程度。

  • SQLE版本:sqle-ce-1.2203.0
  • MySQL版本:MySQL 8.0.28
  • 环境安装过程:略

DDL语句审核

1. 测试create table建表语句⼀

审核结果如下图。

  • ⼩结
    • 审核结果基本没啥问题,不符合建表规则和命名规范的问题SQLE将正常甩出错误。
2. 测试create table 建表语句⼆
  • 下⾯2条SQL示例,⼀条为语法⽆误、⼀条为语法错误(含MySQL保留关键字)。

如下图审核结果,第⼆条 rank 表 其实与预期结果不符合,SQLE应该甩出报错。

正常的审核结果应该跟下图⼀样甩出错误。

  • ⼩结
    • 上述审核结果不⼀样的原因在于,order、rank 虽然同属于MySQL 8.0的保留关键字,但 rank 是8.0版本新增的,当前SQLE的审核规则中关键字库估计需要更新。
    • 注意:该rank建表语句虽能通过审核,但上线仍然会失败。
3. 测试alter table创建/修改索引或列。

审核结果如下图。

  • ⼩结
    • 审核结果基本没啥问题,不符合索引、字段创建规则的问题SQLE将正常甩出错误。
4. 测试alter table禁⽤索引
  • 下⾯2条SQL示例,⼀条为创建索引,⼀条为将索引修改为不可⻅(禁⽤)状态。

如下图审核结果,其实不符合预期。

正常的的审核结果应该为 ⽆问题 ,该语句 MySQL 中执⾏如下图所示。

  • ⼩结 审核结果不符合预期的原因,应该是该 ALTER TABLE ... ALTER INDEX ... 语法为8.0新增,⽬前SQLE暂时还未加⼊解析器。

DCL语句审核

DCL语句⼀般很少在线上环境中进⾏审核或上线,但SQLE依然可以⽀持。

1. 测试set命令示例语句如下。

但是也有可能会有⽆法审核的命令,如下图所示。

审核结果如下图,第2条语句审核结果不符合预期。

正常的审核结果应为 ⽆问题 ,该语句MySQL中执⾏如下图所示。

  • ⼩结
    • 审核结果不符合预期的原因,应该是该 set persist ... 语法为8.0新增,⽬前SQLE暂时还未加⼊解析器。
2. 测试GRANT等⽤户/⻆⾊授权语句。

审核结果如下图。

  • ⼩结
    • 审核结果基本没啥问题,⽤户和⻆⾊创建与授权语句能被SQLE正确识别。

DML语句审核

1. 测试INSERT/UPDATE/DELETE 语句如下。

审核结果如下图。

  • ⼩结
    • 审核结果基本没啥问题,不符合DML规范的问题SQLE将正常甩出错误。
2. 测试select语句如下。

审核结果如下图。

  • ⼩结
    • 审核结果基本没啥问题,SQLE将不符合SQL开发规范的问题正常甩出。

DDL与DML上下⽂关联

DDL与DML上下⽂关联常⻅于发版上线场景,实际⽣产环境中该场景还是⽐较多。

1. 测试语句⼀

审核结果如下图。

  • ⼩结
    • 审核结果符合预期,SQLE能够识别新加的列与⽂中的数据插⼊语句相关联。
2. 测试语句⼆(反例)

审核结果如下图。

  • ⼩结
    • 审核结果符合预期,不相关联的DML语句,SQLE能够识别出并刷出报错。
3. 测试语句三

验证 MySQL 8.0 JSON 相关特性

审核结果如下图。

语句在 MySQL 正常执⾏如下图。

  • ⼩结
    • 除了 MySQL 8.0 JSON 新特性(如 JSON_TABLE⽅法),其它 JSON 语法和 MySQL 5.7 ⼀样,SQLE仍然⽀持。

结论

  • 本⽂测试了SQLE对MySQL 8.0.28的⽀持程度,根据测试结果,⼤部分DDL、DML和DCL语句与MySQL 5.7版本⼀样,都能正常进⾏审核,DML和DDL上下⽂关联能够正确识别。
  • 少数MySQL8.0 新特性涉及的SQL⽬前SQLE可能还不能兼容,例如
    • 建表时存在 MySQL 8.0 新的保留字,如窗⼝函数相关的RANK、ROW_NUMBER等。
    • ALTER TABLE ... ALTER INDEX ... 语法
    • set persist ... 语法
    • JSON_TABLE函数等
  • 总之,瑕不掩瑜,不兼容的点毕竟⽇常SQL开发审核上线中极少使⽤,相信后续SQLE版本将进⾏优化。

本文关键字:#SQLE# #SQL审核#

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 前⾔
  • DDL语句审核
    • 1. 测试create table建表语句⼀
      • 2. 测试create table 建表语句⼆
        • 3. 测试alter table创建/修改索引或列。
          • 4. 测试alter table禁⽤索引
          • DCL语句审核
            • 1. 测试set命令示例语句如下。
              • 2. 测试GRANT等⽤户/⻆⾊授权语句。
              • DML语句审核
                • 1. 测试INSERT/UPDATE/DELETE 语句如下。
                  • 2. 测试select语句如下。
                  • DDL与DML上下⽂关联
                    • 1. 测试语句⼀
                      • 2. 测试语句⼆(反例)
                        • 3. 测试语句三
                        • 结论
                        相关产品与服务
                        云数据库 SQL Server
                        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档