提交 f16a6ef4 编写于 作者: L liipx

add case add content

上级 9e94b63a
......@@ -623,24 +623,24 @@ func init() {
Item: "FUN.007",
Severity: "L1",
Summary: "不建议使用触发器",
Content: ``,
Case: "",
Content: `触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。`,
Case: "CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW());",
Func: (*Query4Audit).RuleForbiddenTrigger,
},
"FUN.008": {
Item: "FUN.008",
Severity: "L1",
Summary: "不建议使用存储过程",
Content: ``,
Case: "",
Content: `存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。`,
Case: "CREATE PROCEDURE simpleproc (OUT param1 INT);",
Func: (*Query4Audit).RuleForbiddenProcedure,
},
"FUN.009": {
Item: "FUN.009",
Severity: "L1",
Summary: "不建议使用自定义函数",
Content: ``,
Case: "",
Content: `不建议使用自定义函数`,
Case: "CREATE FUNCTION hello (s CHAR(20));",
Func: (*Query4Audit).RuleForbiddenFunction,
},
"GRP.001": {
......@@ -1085,16 +1085,16 @@ func init() {
Item: "TBL.006",
Severity: "L1",
Summary: "不建议使用视图",
Content: ``,
Case: "",
Content: `不建议使用视图`,
Case: "create view v_today (today) AS SELECT CURRENT_DATE;",
Func: (*Query4Audit).RuleForbiddenView,
},
"TBL.007": {
Item: "TBL.007",
Severity: "L1",
Summary: "不建议使用临时表",
Content: ``,
Case: "",
Content: `不建议使用临时表`,
Case: "CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB;",
Func: (*Query4Audit).RuleForbiddenTempTable,
},
}
......
......@@ -596,31 +596,31 @@ SELECT SUM(COL) FROM tbl;
* **Item**:FUN.007
* **Severity**:L1
* **Content**:
* **Content**:触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。
* **Case**:
```sql
CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW());
```
## 不建议使用存储过程
* **Item**:FUN.008
* **Severity**:L1
* **Content**:
* **Content**:存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。
* **Case**:
```sql
CREATE PROCEDURE simpleproc (OUT param1 INT);
```
## 不建议使用自定义函数
* **Item**:FUN.009
* **Severity**:L1
* **Content**:
* **Content**:不建议使用自定义函数
* **Case**:
```sql
CREATE FUNCTION hello (s CHAR(20));
```
## 不建议对等值查询列使用 GROUP BY
......@@ -1166,19 +1166,19 @@ CREATE TABLE tbl (a int) DEFAULT CHARSET = latin1;
* **Item**:TBL.006
* **Severity**:L1
* **Content**:
* **Content**:不建议使用视图
* **Case**:
```sql
create view v_today (today) AS SELECT CURRENT_DATE;
```
## 不建议使用临时表
* **Item**:TBL.007
* **Severity**:L1
* **Content**:
* **Content**:不建议使用临时表
* **Case**:
```sql
CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB;
```
......@@ -56,9 +56,9 @@ advisor.Rule{Item:"FUN.003", Severity:"L3", Summary:"使用了合并为可空列
advisor.Rule{Item:"FUN.004", Severity:"L4", Summary:"不建议使用 SYSDATE() 函数", Content:"SYSDATE() 函数可能导致主从数据不一致,请使用 NOW() 函数替代 SYSDATE()。", Case:"SELECT SYSDATE();", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.005", Severity:"L1", Summary:"不建议使用 COUNT(col) 或 COUNT(常量)", Content:"不要使用 COUNT(col) 或 COUNT(常量) 来替代 COUNT(*), COUNT(*) 是 SQL92 定义的标准统计行数的方法,跟数据无关,跟 NULL 和非 NULL 也无关。", Case:"SELECT COUNT(1) FROM tbl;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.006", Severity:"L1", Summary:"使用 SUM(COL) 时需注意 NPE 问题", Content:"当某一列的值全是 NULL 时,COUNT(COL) 的返回结果为0,但 SUM(COL) 的返回结果为 NULL,因此使用 SUM() 时需注意 NPE 问题。可以使用如下方式来避免 SUM 的 NPE 问题: SELECT IF(ISNULL(SUM(COL)), 0, SUM(COL)) FROM tbl", Case:"SELECT SUM(COL) FROM tbl;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.007", Severity:"L1", Summary:"不建议使用触发器", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.008", Severity:"L1", Summary:"不建议使用存储过程", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.009", Severity:"L1", Summary:"不建议使用自定义函数", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.007", Severity:"L1", Summary:"不建议使用触发器", Content:"触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。", Case:"CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW());", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.008", Severity:"L1", Summary:"不建议使用存储过程", Content:"存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。", Case:"CREATE PROCEDURE simpleproc (OUT param1 INT);", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"FUN.009", Severity:"L1", Summary:"不建议使用自定义函数", Content:"不建议使用自定义函数", Case:"CREATE FUNCTION hello (s CHAR(20));", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"GRP.001", Severity:"L2", Summary:"不建议对等值查询列使用 GROUP BY", Content:"GROUP BY 中的列在前面的 WHERE 条件中使用了等值查询,对这样的列进行 GROUP BY 意义不大。", Case:"select film_id, title from film where release_year='2006' group by release_year", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"JOI.001", Severity:"L2", Summary:"JOIN 语句混用逗号和 ANSI 模式", Content:"表连接的时候混用逗号和 ANSI JOIN 不便于人类理解,并且MySQL不同版本的表连接行为和优先级均有所不同,当 MySQL 版本变化后可能会引入错误。", Case:"select c1,c2,c3 from t1,t2 join t3 on t1.c1=t2.c1,t1.c3=t3,c1 where id>1000", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"JOI.002", Severity:"L4", Summary:"同一张表被连接两次", Content:"相同的表在 FROM 子句中至少出现两次,可以简化为对该表的单次访问。", Case:"select tb1.col from (tb1, tb2) join tb2 on tb1.id=tb.id where tb1.id=1", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
......@@ -110,5 +110,5 @@ advisor.Rule{Item:"TBL.002", Severity:"L4", Summary:"请为表选择合适的存
advisor.Rule{Item:"TBL.003", Severity:"L8", Summary:"以DUAL命名的表在数据库中有特殊含义", Content:"DUAL表为虚拟表,不需要创建即可使用,也不建议服务以DUAL命名表。", Case:"create table dual(id int, primary key (id));", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"TBL.004", Severity:"L2", Summary:"表的初始AUTO_INCREMENT值不为0", Content:"AUTO_INCREMENT不为0会导致数据空洞。", Case:"CREATE TABLE tbl (a int) AUTO_INCREMENT = 10;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"TBL.005", Severity:"L4", Summary:"请使用推荐的字符集", Content:"表字符集只允许设置为utf8,utf8mb4", Case:"CREATE TABLE tbl (a int) DEFAULT CHARSET = latin1;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"TBL.006", Severity:"L1", Summary:"不建议使用视图", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"TBL.007", Severity:"L1", Summary:"不建议使用临时表", Content:"", Case:"", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"TBL.006", Severity:"L1", Summary:"不建议使用视图", Content:"不建议使用视图", Case:"create view v_today (today) AS SELECT CURRENT_DATE;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"TBL.007", Severity:"L1", Summary:"不建议使用临时表", Content:"不建议使用临时表", Case:"CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
......@@ -596,31 +596,31 @@ SELECT SUM(COL) FROM tbl;
* **Item**:FUN.007
* **Severity**:L1
* **Content**:
* **Content**:触发器的执行没有反馈和日志,隐藏了实际的执行步骤,当数据库出现问题是,不能通过慢日志分析触发器的具体执行情况,不易发现问题。在MySQL中,触发器不能临时关闭或打开,在数据迁移或数据恢复等场景下,需要临时drop触发器,可能影响到生产环境。
* **Case**:
```sql
CREATE TRIGGER t1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW());
```
## 不建议使用存储过程
* **Item**:FUN.008
* **Severity**:L1
* **Content**:
* **Content**:存储过程无版本控制,配合业务的存储过程升级很难做到业务无感知。存储过程在拓展和移植上也存在问题。
* **Case**:
```sql
CREATE PROCEDURE simpleproc (OUT param1 INT);
```
## 不建议使用自定义函数
* **Item**:FUN.009
* **Severity**:L1
* **Content**:
* **Content**:不建议使用自定义函数
* **Case**:
```sql
CREATE FUNCTION hello (s CHAR(20));
```
## 不建议对等值查询列使用 GROUP BY
......@@ -1166,19 +1166,19 @@ CREATE TABLE tbl (a int) DEFAULT CHARSET = latin1;
* **Item**:TBL.006
* **Severity**:L1
* **Content**:
* **Content**:不建议使用视图
* **Case**:
```sql
create view v_today (today) AS SELECT CURRENT_DATE;
```
## 不建议使用临时表
* **Item**:TBL.007
* **Severity**:L1
* **Content**:
* **Content**:不建议使用临时表
* **Case**:
```sql
CREATE TEMPORARY TABLE `work` (`time` time DEFAULT NULL) ENGINE=InnoDB;
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册