作者:任仲禹
愛可生 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版本將進⾏優化。