
本文共 1114 字,大约阅读时间需要 3 分钟。
阿里开发强制要求的11条SQL编写规范
说明:如需要统计包含NULL的行,应使用count(*)。使用count(列名)时,需明确考虑NULL值对结果的影响。
使用count(distinct col)计算该列的不同非NULL行数。不支持多列的情况下,如果一列全为NULL,另一列不同值也无效,返回0。
当一列全为NULL时,count(col)=0,而sum(col)=NULL。使用sum时需防御性处理,避免 NullPointerException。可用ISNULL(SUM(g)) IFCALLTYPE NULL,返回0或SUM(g)。
使用ISNULL()判断NULL值。NULL比较总为NULL,而非false或true。
分页逻辑:如果count为0,应直接返回,避免分页操作。
禁止使用外键和级联更新。外键影响性能,且级联更新容易导致锁竞争和并发问题。
离开存储程序。存储程序难调试和扩展。
修改或删除前,先select确认记录,避免误删除。
避免in操作。
存储时使用utf-8编码,建议utf8mb4支持表情符号。注意LENGTH和CHAR_LENGTH区别。
避免使用TRUNCATE TABLE,建议使用不带WHERE的DELETE。
不要使用count(列名)或count(常量)替代count()。count()是SQL92标准,适用于所有数据库,无关NULL值。
count(distinct col)计算不同非NULL行数。如果一列全为NULL,其他列无论有无不同值,都返回0。
count(col)=0但sum(col)=NULL。防御性处理sum(),确保没有NullPointerException。可用IF ISNULL(SUM(g), 0, SUM(g))。
使用ISNULL()判断NULL值。NULL与任何值比较均为NULL,不是false或true。
分页时,count=0则直接返回,避免分页查询。
禁止用外键和级联更新。外键影响性能,级联更新容易锁竞争。
离开存储程序,调试和扩展困难。
修改前select确认记录,避免误删。
避免in操作,如有必要则控制集合量在1000以内。
存储表情需utf8mb4编码,区分utf-8和utf8mb4。
避免TRUNCATE TABLE,建议用不带WHERE的DELETE。
阿里开发强制要求的11条SQL编写规范