【MySQL】SQL语句书写规范,让代码更优雅

【MySQL】SQL语句书写规范,让代码更优雅

SQL语句书写规范,让代码更优雅

SQL编写总规范书写规范总结1.书写标准2.命名规则3.注释4.书写规则补充

SQL书写规范(详细)

为了便于快速查看SQL书写规范,建议直接浏览书写规范总结。

SQL编写总规范

SQL语句应正确、规范、高效和最优;同一项目的SQL书写格式应该统一;应避免写非常复杂的SQL语句;SQL语句不应在客户端组织,而应在服务器端组织;SQL语句的语法应与所使用的数据库相适应;应确保变量和参数的类型和大小与数据库中表数据列相匹配;使用SELECT语句时,应指出列名,不应使用列的序号或者用“*”替代所有列名;

示例:

//正确的示例

SELECT

list.manifest_no,

list.bill_no,

stat.list_stat

FROM mft_list list,

list_stat stat

WHERE list.manifest_no = stat.manifest_no

AND list.bill_no = stat.list_no;

使用INSERT语句时,应指定插入的字段名,不应不指定字段名直接插入VALUES;如果 SQL 语句连接多表时,应使用表的别名来引用列;SQL语句应避免对大表的全表扫描操作,对大表的操作应尽量使用索引;SQL语句应避免不必要的排序;SQL语句应避免删除全表的操作;应使用变量绑定实现SQL语句共享,避免使用硬编码;

SELECT emp_name

FROM emp

WHERE emp_no = :B1; //Bind value: 123

SELECT emp_name

FROM emp

WHERE emp_no = :B1; //Bind value: 987

SELECT emp_name

FROM emp

WHERE emp_no = 123;

SELECT emp_name

FROM emp

WHERE emp_no = 987;

在含有子查询的SQL语句中,应减少对表的查询;

UPDATE emp

SET emp_cat = (

SELECT MAX(category)

FROM emp_categories),

sal_range = (

SELECT MAX(sal_range)

FROM emp_categories)

WHERE emp_dept = 0020;

UPDATE emp

SET (emp_cat, sal_range) = (

SELECT MAX(category),

MAX(sal_range)

FROM emp_categories)

WHERE emp_dept = 0020;

SQL语句尽可能避免多表联合复杂查询;应将SQL语句中的数据库函数、计算表达式等放置在等号右边;应按照业务需要使用事务,同时应保持事务简短,避免大事务;在事务完整性的基础上,SQL语句应在程序中显式使用 COMMIT,ROLLBACK,尽快提交事务,释放系统资源;SQL语句应避免频繁引起数据库事务回滚。

书写规范总结

1.书写标准

缩进 (1) 一般缩进为4个空格。 (2)不要用Tab制表符来作缩进

换行 (1)Select/From/Where/Order by/Groupby等子句必须另起一行写。 (2)Select子句内容如果只有一项,与Select同行写。 (3) Select子句内容如果多于一项,每一项单独占一行,在对应Select的基础上向右缩进4空格。 (4) From子句内容如果只有一项,与From同行写。 (5) From子句内容如果多于一项,每一项单独占一行,在对应From的基础上向右缩进4个空格。 (6)Where子句的条件如果有多项,每一个条件占一行,以AND或者OR开头,在对应Where的基础 上向右缩进4个空格。 (7)(Update)Set子句内容每一项单独占一行,无缩进。 (8)Insert子句内容每个表字段单独占一行,无缩进;values每一项单独占一行,无缩进。 (9) SQL文中间不允许出现空行。 (10)存储过程或函数输入参数命名以in开头,如@in_Year;输出参数以out开头,如@out_money;局部变量首字母小写,第二个单词起的每个单词的首字母大写,不使用“_”,如@customerCount;

空格 (1)连接符or、in、and、以及=、<=、>=等前后加上一个空格; (2)逗号之后必须接一个空格; (3)关键字、保留字和左括号之间必须有一个空格。

2.命名规则

常见命名规则有四种样式:完全大写、完全小写、Pascal 大小写和 Camel 大小写。

Camel 大小写 标识符的首字母小写,每个后面连接的单词的首字母大写,其余字母小写的书写约定。对于缩写的双字母单词,要求它们出现在标识符首部时全部小写,否则全部大写。 例如:applicationException id

Pascal 大小写 组成标识符的每个单词的首字母大写,其余字母小写的书写约定。对于缩写的双字母单词,要求全部大写。 例如:ApplicationExceptionID

匈牙利命名法 匈牙利命名法由匈牙利程序员发明,他在微软工作了多年,此命名法就是通过微软的各种产品和文档传出来。多数有经验的程序员,不管他们用的是哪门语言,都或多或少在使用它。 基本原则:变量名 = 属性 + 类型 + 对象描述 即一个变量名是由三部分信息组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。

3.注释

(1) 对较为复杂的SQL语句加上注释,说明算法、功能。注释风格:注释单独成行、放在语句前面。 (2) 应对不易理解的分支条件表达式加注释。 (3) 对重要的计算应说明其功能。 (4) 过长的函数实现,应将其语句按实现的功能分段加以概括性说明。 (5) 常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)。 (6) 可采用单行/多行注释。(-- 或 /**/)

A.代码头部注释 在SQL代码块(sql文件或存储过程)的头部进行注释,标注创建人(Author)、创始日期(Create date)、修改信息(Modify [n])。 格式: – ============================================= – Author: – Create date: – Description: – Modify [n]: < Modifier,Date, Description > – =============================================

注:日期格式使用 yyyy-MM-dd。Modify [n] n代表修改序号,从1开始,每次修改加1。

B.TRANSACTION注释 建议在每个事务的开头进行注释,说明该事务的功能。 – < Modifier,Date, Description > BEGIN TRANSACTION;

4.书写规则补充

SQL 语句要以分号;结尾SQL 语句不区分大小写

SQL 不区分关键字的大小写。例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此。虽然可以根据个人喜好选择大写还是小写(或大小写混杂),但为了理解起来更加容易,经常使用一下规则:

关键字大写数据库名、表名和列名等小写

3. 常数的书写方式是固定的:

SQL 语句中含有字符串的时候,需要像 ‘abc’ 这样,使用英文单引号’将字符串括起来,用来标识这是一个字符串

SQL 语句中含有日期的时候,同样需要使用英文单引号将其括起来。日期的格式有很多种(‘26 Jan 2010’ 或者’10/01/26’ 或者 '2020-01-26’等)在 SQL 语句中书写数字的时候,不需要使用任何符号标识,直接写成 1000 这样的数字即可PS: 列名、表名不是字符串,不能使用单引号。可以用倒引号 ` 把表名和列名括起来。

单词需要用半角空格或者换行来分隔:

SQL 语句的单词之间必须使用半角空格(英文空格)或换行符来进行分隔。没有分隔的语句会发生错误,无法正常执行SQL 语句中的标点符号必须都是英文状态下的,即半角字;不能使用全角空格(中文空格)作为单词的分隔符,否则会发生错误,出现无法预期的结果。

SQL书写规范(详细)

SQL语句中出现的所有表名、表别名、字段名、序列等数据库对象都应小写;SQL 语句中出现的系统保留字、内置函数名、SQL保留字、绑定变量等都应大写;SQL语句中出现的变量参数应采用Camel语法命名,并反映变量的实际意义;SQL语句中的表别名应简短明了,宜反映表名的实际意义;如果一行有多列并超过80个字符,基于列对齐原则,应采用下行缩进;缩进应为1个Tab或者4个字符;同层次的SQL语句缩进应保持一致(纵向对齐);

//存储过程SQL文书写格式的正确示例

SELECT result.dealerCode,

ROUND (SUM (result.submitsubletamountdlr + result.submitpartsamountdlr

+ result.submitlaboramountdlr) / COUNT (*), 2) as avg,

DECODE (null, 'x', 'xx', 'CNY')

FROM (SELECT twc.dealerCode,

twc.submitsubletamountdlr,

twc.submitpartsamountdlr,

twc.submitlaboramountdlr

FROM srv_twc_f twc

WHERE (twc.origsubmittime >= TO_DATE ('Date Range(start)','yyyy/mm/dd')

AND twc.origsubmittime <= TO_DATE ('Date Range(end)','yyyy/mm/dd')

AND NVL (twc.deleteflag, '0') <> '1')

UNION ALL

SELECT history.dealercode,

history.submitsubletamountdlr,

history.submitpartsamountdlr,

history.submitlaboramountdlr

FROM srv_twchistory_f history

WHERE (history.origsubmittime >= TO_DATE ('Date Range(start)', 'yyyy/mm/dd')

AND history.origsubmittime <= TO_DATE ('Date Range(end)','yyyy/mm/dd')

AND NVL (history.deleteflag,'0') <> '1')) result

GROUP BY result.dealerCode

ORDER BY avg DESC);

SELECT/FROM/WHERE/ORDER BY/GROUP BY等子句应独占一行;SELECT子句内容如果只有一项,应与 SELECT 同占一行;SELECT子句内容如果多于一项,每一项都应独占一行,并在对应 SELECT的基础上向右缩进2个Tab或者8个字符;FROM子句内容如果只有一项,应与 FROM同占一行;FROM子句内容如果多于一项,每一项都应独占一行,并在对应FROM的基础上向右缩进1个Tab或者4个字符;WHERE子句内容如果只有一项,应与 WHERE同占一行;WHERE子句的条件如果有多项,每一个条件应独占一行,并以AND开头,并在对应WHERE的基础上向右缩进1个Tab或者4个字符;

//SELECT语句书写的正确示例

SELECT bill_no,

FROM mft_list

WHERE manifest_no =‘000000000000000007’;

SELECT list.manifest_no,

list.list_no,

stat.list_stat

FROM mft_list list,

list_stat stat

WHERE list.manifest_no = stat.manifest_no

AND stat.stat != 2;

(UPDATE)SET子句内容如果有一项,应与 SET同占一行;(UPDATE)SET子句内容如果有多项,每一项应独占一行,并在对应SET的基础上向右缩进1个Tab或者4个字符;

//SELECT语句书写的正确示例

UPDATE list_stat

SET list_stat = '2',

parent = '0'

WHERE list_no = 'bill010';

INSERT 子句左/右括号以及每个表字段应独占一行,其中括号无缩进,表字段在对应括号的基础上向右缩进1个Tab或者4个字符;VALUES子句左/右括号以及每一项的值应独占一行,其中括号无缩进,每一项的值在对应括号的基础上向右缩进1个Tab或者4个字符;

//INSERT语句书写的正确示例

INSERT INTO list_stat

(

list_no,

list_stat,

parent,

manifest_no,

div_flag

)

VALUES

(

'bill020',

'1',

'0',

'000000000000007807',

'0'

);

SQL 文中不应出现空行;SQL语句内的算术运算符、逻辑运算符(AND、OR、NOT)、 比较运算符(=、<=、>=、>、<、<>、BETWEEN AND)、IN、LIKE等运算符前后都应加一空格;SQL 语句中逗号后应加一空格;不等于应统一使用符号“<>”;

仅为片面整理总结,欢迎补充!

相关推荐

365bet电脑版 5s入耳式耳机

5s入耳式耳机

📅 07-01 👁️ 4086
365bet电脑版 成为明星的七种方法 成为明星有哪些途径