SQL审核 | SQLE 兼容 MySQL 8.0 测评

作者:任仲禹
爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
目录
  • 前?
  • DDL语句审核
  • DCL语句审核
  • DML语句审核
  • DDL与DML上下?关联
  • 结论
前? SQLE是由爱可?开发并开源、?持SQL审核、标准化上线流程等丰富功能的可扩展 SQL 审核?具(https://github.com/actiontech...);?前?部分 MySQL 业务使?场景以5.7版本为主,今天本?来验证下 SQLE 对 MySQL 8.0 的?持程度。
  • SQLE版本:sqle-ce-1.2203.0
  • MySQL版本:MySQL 8.0.28
  • 环境安装过程:略
DDL语句审核 1. 测试create table建表语句? SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

审核结果如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    • 审核结果基本没啥问题,不符合建表规则和命名规范的问题SQLE将正常甩出错误。
2. 测试create table 建表语句?
  • 下?2条SQL示例,?条为语法?误、?条为语法错误(含MySQL保留关键字)。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

如下图审核结果,第?条 rank 表 其实与预期结果不符合,SQLE应该甩出报错。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

正常的审核结果应该跟下图?样甩出错误。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

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

审核结果如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    • 审核结果基本没啥问题,不符合索引、字段创建规则的问题SQLE将正常甩出错误。
4. 测试alter table禁?索引
  • 下?2条SQL示例,?条为创建索引,?条为将索引修改为不可?(禁?)状态。
    SQL审核 | SQLE 兼容 MySQL 8.0 测评
    文章图片
如下图审核结果,其实不符合预期。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

正常的的审核结果应该为 ?问题 ,该语句 MySQL 中执?如下图所示。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    审核结果不符合预期的原因,应该是该 ALTER TABLE ... ALTER INDEX ... 语法为8.0新增,?前SQLE暂时还未加?解析器。
DCL语句审核 DCL语句?般很少在线上环境中进?审核或上线,但SQLE依然可以?持。
1. 测试set命令示例语句如下。 SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

但是也有可能会有?法审核的命令,如下图所示。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

审核结果如下图,第2条语句审核结果不符合预期。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

正常的审核结果应为 ?问题 ,该语句MySQL中执?如下图所示。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    • 审核结果不符合预期的原因,应该是该 set persist ... 语法为8.0新增,?前SQLE暂时还未加?解析器。
2. 测试GRANT等?户/??授权语句。 SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

审核结果如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    • 审核结果基本没啥问题,?户和??创建与授权语句能被SQLE正确识别。
DML语句审核 1. 测试INSERT/UPDATE/DELETE 语句如下。 SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

审核结果如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    • 审核结果基本没啥问题,不符合DML规范的问题SQLE将正常甩出错误。
      2.测试select语句如下。SQL审核 | SQLE 兼容 MySQL 8.0 测评
      文章图片

      审核结果如下图。
      SQL审核 | SQLE 兼容 MySQL 8.0 测评
      文章图片

  • ?结
    • 审核结果基本没啥问题,SQLE将不符合SQL开发规范的问题正常甩出。
DDL与DML上下?关联 DDL与DML上下?关联常?于发版上线场景,实际?产环境中该场景还是?较多。
1. 测试语句?。 SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

审核结果如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    • 审核结果符合预期,SQLE能够识别新加的列与?中的数据插?语句相关联。
2. 测试语句?(反例) SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

审核结果如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

  • ?结
    • 审核结果符合预期,不相关联的DML语句,SQLE能够识别出并刷出报错。
3. 测试语句三 验证MySQL 8.0 JSON相关特性
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

审核结果如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

语句在MySQL正常执?如下图。
SQL审核 | SQLE 兼容 MySQL 8.0 测评
文章图片

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

    推荐阅读