92 《阿里巴巴 java开发手册》关于MySQL的规约(SQL 语句)

【强制】

  1、不要使用count(列名)或 count(常量)来替代 count(*),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NUll无关。

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

  2、count(distinct  column)计算该列除NULL外的不重复行数。注意,count(discount  column1,column2),如果其中一列全为NULL,那么即使另一类有不同的值,也返回为0。

    博主注:count(discount  column1,column2)如果数据库 student 表中有这样三条数据

    

    执行SELECT COUNT(DISTINCT student.age,student.`name`)FROM student;   返回结果为1。

  3、当某一列的值全为NULL时,count(column)的返回结果为0,但sum(column)的返回结果NULL,因此使用sum()时需注意NPE(空指针)问题。

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

    博主注:IFNULL(expression,alt_value)函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。

  4、使用 ISNULL()来判断是否为NULL值。

扫描二维码关注公众号,回复: 6568173 查看本文章

    说明:NULL与任何值的直接比较都为NULL。

      1)NULL<>NULL 的返回结果是NULL,而不是false。

      2)NULL=NULL  的返回结果是NULL,而不是true。

      3)NULL<>1  的返回结果是NULL,而不是true。

  5、在代码中写分页查询逻辑时,若count为0应该直接返回,避免执行后面的分页语句。

  6、不得使用外键与级联,一切外键概念必须在应用层解决。

    说明:外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

  7、禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。

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

【推荐】

  1、in 操作能避免则避免,若实在避免不了,需要仔细评估in后面的集合元素数量,控制在1000个以内。

猜你喜欢

转载自www.cnblogs.com/xiaonengxiong/p/11069288.html