阿里开发强制要求的11条SQL编写规范
发布日期:2021-05-10 07:19:44 浏览次数:20 分类:精选文章

本文共 1114 字,大约阅读时间需要 3 分钟。

阿里开发强制要求的11条SQL编写规范

  • 不要使用count(列名)或count(常量)来替代count()。count()依据SQL92标准,适用于所有数据库,无关NULL值。count(列名)只统计非NULL值,而count(*)统计所有行,包括NULL值。
  • 说明:如需要统计包含NULL的行,应使用count(*)。使用count(列名)时,需明确考虑NULL值对结果的影响。

    1. 使用count(distinct col)计算该列的不同非NULL行数。不支持多列的情况下,如果一列全为NULL,另一列不同值也无效,返回0。

    2. 当一列全为NULL时,count(col)=0,而sum(col)=NULL。使用sum时需防御性处理,避免 NullPointerException。可用ISNULL(SUM(g)) IFCALLTYPE NULL,返回0或SUM(g)。

    3. 使用ISNULL()判断NULL值。NULL比较总为NULL,而非false或true。

    4. 分页逻辑:如果count为0,应直接返回,避免分页操作。

    5. 禁止使用外键和级联更新。外键影响性能,且级联更新容易导致锁竞争和并发问题。

    6. 离开存储程序。存储程序难调试和扩展。

    7. 修改或删除前,先select确认记录,避免误删除。

    8. 避免in操作。

    9. 存储时使用utf-8编码,建议utf8mb4支持表情符号。注意LENGTH和CHAR_LENGTH区别。

    10. 避免使用TRUNCATE TABLE,建议使用不带WHERE的DELETE。

    11. 阿里开发强制要求的11条SQL编写规范

    12. 不要使用count(列名)或count(常量)替代count()。count()是SQL92标准,适用于所有数据库,无关NULL值。

    13. count(distinct col)计算不同非NULL行数。如果一列全为NULL,其他列无论有无不同值,都返回0。

    14. count(col)=0但sum(col)=NULL。防御性处理sum(),确保没有NullPointerException。可用IF ISNULL(SUM(g), 0, SUM(g))。

    15. 使用ISNULL()判断NULL值。NULL与任何值比较均为NULL,不是false或true。

    16. 分页时,count=0则直接返回,避免分页查询。

    17. 禁止用外键和级联更新。外键影响性能,级联更新容易锁竞争。

    18. 离开存储程序,调试和扩展困难。

    19. 修改前select确认记录,避免误删。

    20. 避免in操作,如有必要则控制集合量在1000以内。

    21. 存储表情需utf8mb4编码,区分utf-8和utf8mb4。

    22. 避免TRUNCATE TABLE,建议用不带WHERE的DELETE。

    上一篇:写SQL记住这19个优化原则,效率至少提高3倍
    下一篇:不要这样写SQL 改掉这些坏习惯

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月28日 16时41分49秒