【强制】
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值。
说明: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个以内。