乐趣区

关于sql:SQL审核-SQLE-兼容-MySQL-80-测评

作者:任仲禹

爱可生 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 建表语句⼀

审核后果如下图。

  • ⼩结

    • 审核后果根本没啥问题,不合乎建表规定和命名标准的问题 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 版本将进⾏优化。
退出移动版