作者:任仲禹
爱可生 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版本将进⾏优化。