文本内容:
阿里开发强制要求的11条SQL编写规范.【强制】不要使用count例名或count常量来替代count*count*是SQL92定义的标准统计行数的语法跟数据库无关,跟NULL和非NULL无关说明:count*会统计值为NULL的行,而count列名不会统计此列为NULL值的行.【强制】countdistinctcol计算该列除NULL之外的不重复行数,注意countdistinctcollcol2如果其中一列全为NULL那么即使另一列有不同的值,也返回为0o.【强制】当某一列的值全是NULL时countcol的返回结果为0但sumcol的返回结果为NULL因此使用sum时需注意NPE问题正例可以使用如下方式来避免sum的NPE问题SELECTIFISNULLSUMgOSUMgFROMtable;.【强制】使用ISNU山来判断是否为NULL值说明NULL与任何值的直接比较都为NULLONULLNULL的返回结果是NULL而不是falseNULL=NULL的返回结果是NULL而不是trueNULLol的返回结果是NULL而不是true.【强制】在代码中写分页查询逻辑时,若count为应直接返回,避免执行后面的分页语句.【强制】不得使用外键与级联,一切外键概念必须在应用层解决说明以学生和成绩的关系为例,学生表中的studenjid是主键那么成绩表中的studentjd则为外键如果更新学生表中的student_id同时触发成绩表中的student_id更新,即为级联更新外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度.【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性.【强制】数据订正(特别是删除、修改记录操作)时,要先select避免出现误删除,确认无误才能执行更新语句.【推荐】in操作能避免则避免,若实在避免不了,需要仔细评估in后边的集合元素数量,控制在1000个之内.【参考】如果有国际化需要,所有的字符存储与表示,均以utf-8编码,注意字符统计函数的区别说明SELECTLENGTH轻松工作);返回为12SELECTCHARACTER_LENGTH(轻松工作);返回为4如果需要存储表情,那么选择utf8mb4来进行存储,注意它与utf-8编码的区别.【参考】TRUNCATETABLE比DELETE速度快,且使用的系统和事务日志资源少,但TRUNCATE无事务且不触发trigger有可能造成事故,故不建议在开发代码中使用此语句说明TRUNCATETABLE在功能上与不带WHERE子句的DELETE语句相同。
个人认证
优秀文档
获得点赞 0