阿里巴巴码农这修炼秘籍:sql语句书写规约

街角幸福 街角幸福     2022-12-14     413

关键词:

阿里巴巴码农这修炼秘籍:SQL语句书写规约

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

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


【强制】count(distinct col) 计算该列除 NULL 之外的不重复数量。注意 count(distinct col1, col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0。


【强制】当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为NULL,因此使用 sum()时需注意 NPE 问题。

正例:可以使用如下方式来避免 sum 的 NPE 问题:

SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table;


【强制】使用 ISNULL() 来判断是否为 NULL 值。注意: NULL 与任何值的直接比较都为 NULL

说明:

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

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

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


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


【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

说明:(概念解释)学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,则为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。


【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。


【强制】IDB 数据订正时,删除和修改记录时,要先 select,避免出现误删除,确认无误才能提交执行。


【推荐】in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控制在 1000 个之内。


【参考】因阿里巴巴全球化需要,所有的字符存储与表示,均以 utf-8 编码,那么字符计数方法注意:

说明

SELECT LENGTH("阿里巴巴"); 返回为 12

SELECT CHARACTER_LENGTH("阿里巴巴"); 返回为 4

如果要使用表情,那么使用 utfmb4 来进行存储,注意它与 utf-8 编码。


【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE无事务且不触发 trigger,有可能造成事故,故不建议在开发代码中使用此语句。

说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

阿里巴巴java开发手册编程规约之控制语句

1.【强制】在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。2.【强制】在if/else/for/while/do... 查看详情

每天3分钟操作系统修炼秘籍:虚拟内存简介

点我查看秘籍连载资源隔离:虚拟内存前面描述的所有操作系统基础知识都是进程和CPU资源相关的内容,另一个操作系统中和进程相关的比较重要的话题是内存资源。操作系统主要目的是执行程序,而程序在执行时,程序自身以... 查看详情

阿里开发手册规范(java)

...)OOP规约(五)日期时间(六)集合处理 (七)并发处理(八)控制语句(九)注释规约(十)前后端规约二、异常日志 (一)错误码(二)异常处理(三)日志规约 三、单元测试 四、安全规约五、MySQL数据库 (一)建表规约(二)索引规约 (三)SQL语句(... 查看详情

一个普通码农这辈子能掌握这101道算法题就足够了

...;面试过的200人,以及过往被面试100次。发现一个普通码农这辈子能掌握101题目就足够了,并不需要动辄大几百道才能怎么样!你就认认真真刷101道题目已经足够你拿到一个非常好的offer了。但是刷101道题目对于一个普... 查看详情

民生直销银行终端安全修炼秘籍之hmscore两大安全能力

在金融行业数字化转型浪潮下,传统商业银行先后推出手机银行、直销银行等移动金融客户端。作为民生银行“数字金融”的试验田,民生直销银行始终秉承“简单的银行”发展理念,着力打造生态平台,通过互... 查看详情

民生直销银行终端安全修炼秘籍之hmscore两大安全能力

在金融行业数字化转型浪潮下,传统商业银行先后推出手机银行、直销银行等移动金融客户端。作为民生银行“数字金融”的试验田,民生直销银行始终秉承“简单的银行”发展理念,着力打造生态平台,通过互... 查看详情

sql语句分组/排序/计算总数/连接等sql语句书写

1.什么是表连接?答:比如两张表,要获取的信息来自两张表,就需要通过外键的形式进行两张表的连接。最后产后组合信息。表连接是通过join连接的。表连接说白了就是产生一个大表。表连接也都是用于查询上的,用户查询获... 查看详情

阿里巴巴java开发规约及插件安装

【上海尚学堂编辑整理】10.14日,阿里巴巴在杭州云栖大会上,正式发布了由阿里巴巴P3C项目组,经过近一年的持续研发,正式发布众所期待的《阿里巴巴Java开发规约》的扫描插件。 插件全球首发仪式,大牛云集平日低调的... 查看详情

阿里巴巴java开发手册编程规约之注释规约

1.【强制】类、类属性、类方法的注释必须使用Javadoc规范,使用/**内容*/格式,不得使用//xxx方式。说明:在IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即... 查看详情

阿里巴巴java开发手册(安全规约)

  查看详情

阿里巴巴java开发手册编程规约之oop规约

1.【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。2.【强制】所有的覆写方法,必须加@Override注解。说明:getObject()与get0bject()的问题。一个是字母的O,一... 查看详情

java单体服务开发指南(代码片段)

...式4、OOP规约5、日期时间6、集合处理7、并发处理8、控制语句9、注释规约10、前后端规约11、其它三、异常日志(参考《阿里Java开发手册》)1、错误码2、异常处理3、日志规约四、单元测试(参考《阿里J 查看详情

阿里java开发手冊之编程规约

...在2月9号,阿里出了一份Java开发手冊(正式版),分为编程规约。异常日志。MySQL规约,project规约。安全规约五个章节。这里我依据阿里的编程规约,重点记录(黑色加粗部分)自己还未做好的一些规范,同一时候方便查阅。编程... 查看详情

阿里巴巴java开发手册1.7.0(嵩山版)编程规约&mysql数据库规约

阿里巴巴Java开发手册1.7.0(嵩山版)一、编程规约(一)命名风格所有命名不得以==下划线和$==开始和结束。所有命名不得以拼音或拼音英文混合。类名使用UpperCamelCase风格。方法名、参数名、成员变量、局部变量都统一使用lower... 查看详情

sqlserver和access数据库在书写sql语句时的语法差异

sql:datediff(d,eff_time,getdate())access:datediff(‘d‘,eff_time,getdate())  查看详情

还没有掌握rabbitmq的码农们,你们的福音来啦!美团内网不传rabbitmq秘籍意外流出!

RabbitMQ于2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征... 查看详情

《程序员修炼手册》心得

看完高淇老师的《程序员修炼手册》,我感觉自己不再迷茫了,我自己总结了三点秘籍。秘籍一:无比的热情不管你是出于什么目的,是单纯的爱好还是想要依靠一门技术得到高薪职业,兴趣是最好的老师,只要你对程序存在好... 查看详情

阿里巴巴java规约学习

命名规范包名:com.alibaba.open.util。全小写类名:XmlService。单词首大写。方法名:getHttpMessage(),首单词小写。变量名:localValue,首单词小写。参数名:inputUserId,首单词小写。常量:MAX_STOCK_COUNT,单词间以"_"隔开。 查看详情