净食安净菜管理系统文档 净食安净菜管理系统文档
首页
  • 客户管理系统
  • 商品管理系统
  • 销售管理系统
  • 采购管理系统
  • 加工管理系统
  • 库存管理系统
  • 质量管理系统
  • 账务管理系统
  • 基础平台
  • 员工操作终端(平板)
  • 智能电子秤
  • 用户商城系统后端
  • 用户商城系统前端
  • 零星需求待整理
  • 客户管理系统
  • 商品管理系统
  • 销售管理系统
  • 采购管理系统
  • 加工管理系统
  • 库存管理系统
  • 质量管理系统
  • 账务管理系统
  • 基础平台
  • 员工操作终端(平板)
  • 智能电子秤
  • 用户商城系统后端
  • 用户商城系统前端
  • 编码规范
  • 开发环境搭建
  • 开发手册
首页
  • 客户管理系统
  • 商品管理系统
  • 销售管理系统
  • 采购管理系统
  • 加工管理系统
  • 库存管理系统
  • 质量管理系统
  • 账务管理系统
  • 基础平台
  • 员工操作终端(平板)
  • 智能电子秤
  • 用户商城系统后端
  • 用户商城系统前端
  • 零星需求待整理
  • 客户管理系统
  • 商品管理系统
  • 销售管理系统
  • 采购管理系统
  • 加工管理系统
  • 库存管理系统
  • 质量管理系统
  • 账务管理系统
  • 基础平台
  • 员工操作终端(平板)
  • 智能电子秤
  • 用户商城系统后端
  • 用户商城系统前端
  • 编码规范
  • 开发环境搭建
  • 开发手册
  • 开发文档
  • 编码规范

    • 前言
    • 编程规约

      • 命名风格
      • 常量定义
      • 代码格式
      • OOP规约
      • 集合处理
      • 并发处理
      • 控制语句
      • 注释规约
      • 其它
    • 异常日志

      • 异常处理
      • 日志规约
    • 0单元测试
    • 0安全规约
    • MySQL数据库

      • 建表规约
      • 索引规约
      • SQL语句
      • ORM映射
    • 工程结构

      • 应用分层
      • 二方库依赖
      • 服务器
  • 开发环境搭建

    • java后端环境搭建
    • 前端环境搭建
    • 文档环境搭建
  • 开发手册

    • 代码规范与工具使用
    • 开发手册
  • 基础工具准备

  • 基础平台

    • 组件
  • layui
  • index
  • 开发文档
  • 编码规范
  • MySQL数据库
GICT
2020-06-12

SQL语句

# SQL 语句

  1. 【强制】不要使用 count(列名) 或 count(常量) 来替代 count(*) , count(*) 是 SQL 92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。

说明: count(*) 会统计值为 NULL 的行,而 count(列名) 不会统计此列为 NULL 值的行。

  1. 【强制】 count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1, col2 ) 如果其中一列全为 NULL ,那么即使另一列有不同的值,也返回为 0。

  2. 【强制】当某一列的值全是 NULL 时, count(col) 的返回结果为 0,但 sum(col) 的返回结果为 NULL ,因此使用 sum() 时需注意 NPE 问题。

正例:可以使用如下方式来避免 sum 的 NPE 问题: SELECT IF(ISNULL(SUM(g)) ,0, SUM(g)) FROM table;

  1. 【强制】使用 ISNULL() 来判断是否为 NULL 值。

说明: NULL 与任何值的直接比较都为 NULL。 1 ) NULL<>NULL 的返回结果是 NULL ,而不是 false 。 2 ) NULL=NULL 的返回结果是 NULL ,而不是 true 。 3 ) NULL<>1 的返回结果是 NULL ,而不是 true 。

  1. 【强制】 在代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。

  2. 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

说明:以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id ,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群 ; 级联更新是强阻塞,存在数据库更新风暴的风险 ; 外键影响数据库的插入速度。

  1. 【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。

  2. 【强制】数据订正(特别是删除、修改记录操作)时,要先 select ,避免出现误删除,确认无误才能执行更新语句。

  3. 【推荐】 in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控制在 1000 个之内。

  4. 【参考】如果有国际化需要,所有的字符存储与表示,均以 utf -8 编码,注意字符统计函数的区别。

说明:

SELECT LENGTH( "轻松工作" ); 返回为 12
SELECT CHARACTER _ LENGTH( "轻松工作" ); 返回为 4
1
2

如果需要存储表情,那么选择 utf8mb 4 来进行存储,注意它与 utf -8 编码的区别。

  1. 【参考】 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE无事务且不触发 trigger ,有可能造成事故,故不建议在开发代码中使用此语句。

说明: TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

索引规约
ORM映射

← 索引规约 ORM映射→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式