SQL编写规范_v1.0_20120523
- 格式:docx
- 大小:41.40 KB
- 文档页数:16
SQL编写规范1 范围本规范规定了SQL DQL和DML语言的编写总则,从书写格式和性能优化两方面归纳了SQL 书写的具体要求,并给出SQL语句示例。
本规范适用于XXXX科技有限公司所有开发人员。
2 规范性引用文件下列文件中的条款通过本规范的引用而成为本规范的条款。
凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本规范,然而,鼓励根据本规范达成协议的各方研究是否可使用这些文件的最新版本。
凡是不注日期的引用文件,其最新版本适用于本规范。
3 术语和定义下列术语和定义适用于本规范。
3.1 驱动表:ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表将被最先处理。
这个最先处理的表就是驱动表。
3.2 交叉表:被其他表引用的表。
4 SQL编写总则4.1 SQL语句应正确、规范、高效和最优。
4.2 同一项目的SQL书写格式应该统一。
4.3 应避免写非常复杂的SQL语句。
4.4 SQL语句不应在客户端组织,而应在服务器端组织。
4.5 SQL语句的语法应与所使用的数据库相适应。
4.6 应确保变量和参数的类型和大小与数据库中表数据列相匹配。
4.7 使用SELECT语句时,应指出列名,不应使用列的序号或者用“*”替代所有列名。
4.8 使用INSERT语句时,应指定插入的字段名,不应不指定字段名直接插入VALUES。
4.9 如果 SQL 语句连接多表时,应使用表的别名来引用列。
1list_stat statWHERElist.manifest_no = stat.manifest_noAND list.bill_no = stat.list_no;4.10 SQL语句应避免对大表的全表扫描操作,对大表的操作应尽量使用索引。
4.11 SQL语句应避免不必要的排序。
4.12 SQL语句应避免删除全表的操作。
4.13 应使用变量绑定实现SQL语句共享,避免使用硬编码。
SQL编码规范(V1.00)文 档 信 息文档名称:SQL编码规范电子文档:版本号: 1.00密级:保密文档编号:编写人:马云日期:2007-03-27校对人:日期:审核人:日期:批准人:日期:更 改 记 录更改序号更改原因更改页码更改前版本号更改后版本号更改人生效日期备注目录1注释规范 61.1.一般性注释 61.2.函数文本注释 62.排版格式 72.1.缩进 72.2.换行 82.3.空格 102.4.大小写 102.5.对齐 103.命名规则 113.1.输入变量 113.2.输出变量 113.3.内部变量 113.4.游标命名 114.编码规范 114.1.不等于统一使用"<>" 114.2.使用表的别名 114.3.使用SELECT语句时,必须指出列名 124.4.使用INSERT语句时,必须指定插入的字段名。
124.5.减少子查询的使用 124.6.适当添加索引以提高查询效率 124.7.不要在WHERE字句中对索引列施以函数 124.8.不要使用数据库的类型自动转换功能,使用显式的类型转换 12 4.9.应使用变量绑定实现SQL语句共享,避免使用硬编码 124.10.用执行计划分析SQL性能 14附录A:Oracle SQL性能优化 14A.1选用适合的ORACLE优化器 14A.2访问TABLE的方式 15A.3共享SQL语句 15A.4选择最有效率的表名顺序(只在基于规则的优化器中有效) 17 A.5WHERE子句中的连接顺序 19A.6SELECT子句中避免使用 ‘ * ‘ 19A.7减少访问数据库的次数 19A.8使用DECODE函数来减少处理时间 21A.9整合简单,无关联的数据库访问 22A.10删除重复记录 23A.11用TRUNCATE替代DELETE全表记录 23A.12尽量多使用COMMIT 23A.13计算记录条数 24A.14用Where子句替换HAVING子句 24A.15减少对表的查询 24A.16通过内部函数提高SQL效率 26A.17使用表的别名(Alias) 27A.18用EXISTS替代IN 27A.19用NOT EXISTS替代NOT IN 28A.20用表连接替换EXISTS 29A.21用EXISTS替换DISTINCT 30A.22识别'低效执行'的SQL语句 31A.23使用TKPROF 工具来查询SQL性能状态 31A.24用EXPLAIN PLAN 分析SQL语句 32A.25用索引提高效率 34A.26索引的操作 34A.27基础表的选择 36A.28多个平等的索引 37A.29等式比较和范围比较 38A.30不明确的索引等级 39A.31强制索引失效 40A.32避免在索引列上使用计算 41A.33自动选择索引 42A.34避免在索引列上使用NOT 42A.35用>=替代> 44A.36用UNION替换OR (适用于索引列) 44A.37用IN来替换OR 48A.38避免在索引列上使用IS NULL和IS NOT NULL 49 A.39总是使用索引的第一个列 50A.40ORACLE内部操作 51A.41用UNION-ALL 替换UNION ( 如果有可能的话) 51 A.42使用提示(Hints) 53A.43用WHERE替代ORDER BY 54A.44避免改变索引列的类型 56A.45需要当心的WHERE子句 57A.46连接多个扫描 58A.47CBO下使用更具选择性的索引 60A.48避免使用耗费资源的操作 60A.49优化GROUP BY 61A.50使用日期 62A.51使用显式的游标(CURSORs) 62A.52优化EXPORT和IMPORT 62A.53分离表和索引 631注释规范.1. 一般性注释.1.1. 创建每一数据库对象时都要加上COMMENT ON注释,以说明该对象的功能和用途;建表时,对某些数据列也要加上COMMENT ON注释,以说明该列和/或列取值的含义。
SQL&PL/SQL编程规范一、 Sql&PL/SQL书写规范:1、语句中出现的所有表名、字段名全部小写,系统保留字、内置函数名、Sql保留字大写。
2、连接符or、in、and、以及=、<=、>=等前后加上一个空格。
3、对较为复杂的sql语句加上注释,说明算法、功能。
注释风格:注释单独成行、放在语句前面。
(1) 应对不易理解的分支条件表达式加注释;(2) 对重要的计算应说明其功能;(3) 过长的函数实现,应将其语句按实现的功能分段加以概括性说明;(4) 每条SQL语句均应有注释说明(表名、字段名)。
(5) 常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)(6) 可采用单行/多行注释。
(-- 或 /* */ 方式)4、 SQL语句的缩进风格(1) 一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进(2) where子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。
5、多表连接时,使用表的别名来引用列。
6、供别的文件或函数调用的函数,绝不应使用全局变量交换数据;7、变量令名不能超出ORACLE的限制(30个字符),令名要规范,要用英文令名,从变量上能看到变量的作用,如g名称全局变量m名称局部变量c名称光标p名称参数8、查找数据库表或视图时,只能取出确实需要的那些字段,不要使用*来代替所有列名。
要清楚明白地使用列名,而不能使用列的序号。
9、功能相似的过程和函数,尽量写到同一个包中,加强管理。
如例(1)二、书写优化性能建议1、避免嵌套连接。
例如:A = B and B = C and C = D2、where条件中尽量减少使用常量比较,改用主机变量3、系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱动表(from 后边最后一个表)。
4、大量的排序操作影响系统性能,所以尽量减少order by和group by排序操作。
SQL语句编写与优化规范1.使用大小写:通常建议使用大写字母编写SQL关键字,而使用小写字母编写表名、列名等标识符,以提高可读性。
2.使用缩进和换行:为了增加SQL语句的可读性,建议使用缩进和换行来对代码进行格式化。
例如,每个关键字和每个表达式应该独占一行,并使用适当的缩进来标识层次关系。
3.使用注释:在SQL语句中使用适当的注释可以提高代码的可读性和可维护性。
注释应该解释SQL语句的意图、逻辑和关键细节。
4. 避免通配符查询:在SQL语句中应尽量避免使用通配符(如%),特别是在列的开头(如column_name%)。
这样的查询通常会导致全表扫描,影响性能。
5.使用索引:为常用查询创建索引可以提高查询性能。
对经常用于连接、过滤和排序的列创建索引可以大大减少查询的执行时间。
6.避免使用SELECT*:在查询语句中尽量避免使用SELECT*,而应该明确指定需要查询的列。
这样可以减少网络传输的数据量,并改善查询的执行性能。
7.使用合适的数据类型:在设计表结构时应该选择合适的数据类型来存储数据。
过大或过小的数据类型都会影响查询的性能,还可能导致数据丢失或溢出。
8.使用合适的连接方式:在连接多个表时,应该选择合适的连接方式。
内连接、外连接和交叉连接的选择应基于查询需求和表之间的关系。
9.避免嵌套查询:在SQL语句中尽量避免使用嵌套查询,特别是在大数据集上。
嵌套查询通常会导致性能问题,可以考虑使用连接(JOIN)来代替。
10.使用事务:在需要一致性和可靠性的操作中,应该使用事务来确保数据的完整性。
事务可以将多个操作作为一个逻辑单元,要么全部执行成功,要么全部回滚。
总结:SQL语句的编写与优化规范可以提高代码的可读性、可维护性和执行性能。
编写SQL语句时应注意使用大小写、缩进和换行,添加注释,避免通配符查询和嵌套查询,使用索引和合适的数据类型,选择合适的连接方式,以及使用事务确保数据的完整性。
竭诚为您提供优质文档/双击可除sql语句书写规范篇一:标准sql语句的写法有次面试非得让我写3表连接查询的标准sql语句,可是我不知道,我们一般都是直接写而不考虑是否遵循标准,能用即可的。
所以检查了一下。
具体的如下:(/u/22313/showart.phpid=21 4419)一、简单查询简单的transact-sql查询只包括选择列表、FRom子句和wheRe子句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。
selectnickname,emailFRomtesttablewheRename=张三(一)选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下面语句显示testtable表中所有列的数据:select*FRomtesttable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:selectnickname,emailFRomtesttable3、更改列标题在选择列表中,可重新指定列标题。
定义格式为:列标题=列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:select昵称=nickname,电子邮件=emailFRomtesttable4、删除重复行select语句中使用all或distinct选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为all。
使用distinct选项时,对于所有重复的数据行在select返回的结果集合中只保留一行。
5、限制返回的行数使用topn[peRcent]选项限制返回的数据行数,topn说明返回n行,而topnpeRcent时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
数据库应用SQL编写规范展开全文1. 编程规范本章讲述ORACLE数据库SQL脚本编码规范。
1.1. 总述1.1.1. 编码规范1)编写脚本时,Oracle保留字大写,其他一律使用小写,除非必要(如:作字符串时或注释语句中);2)脚本必须规范,SQL编写不能采用缩略写法:如INSERT INTO中的INTO不能省略;INTO后面要列出字段名;3)语句内的空格,统一为一个空格;4)表定义中,字段名、字段类型(长度)、缺省、(非)空、字段注释都必须左对齐;5)使用空格键对齐,不要使用Tab键;6)运算符前后,各保留一个空格;7)所有对象命名必须是有意义的,且不能使用保留字;8) 后台存储过程SQL文件中不允许出现字符’&’,注释中也不允许;1.1.2. 关于注释为保证SQL语句的可读性和推广性,需增加相关注释说明。
包、存储过程、函数的注释中应包含以下内容:1)编写人、编写日期、编写目的与主要内容;2)修改人、修改日期、修改目的与主要内容;3)如果有特殊处理、特别的技巧等内容,一定要在注释中详细说明;4)注释应单独成行,并放在语句前面;5)应对不易理解的分支条件表达式加注释;6)对重要的计算应说明其功能;7)过长的函数实现,应将其语句按实现的功能分段加以概括性说明;8)对常量及变量注释时,应注释被保存值的含义,包括合法取值的范围;9)应采用多行注释方式(/* */ );10) 注释尽量采用英文,防止数据库字符集问题;11)源程序有效注释量必须在30%左右,注释不宜太多也不能太少。
1.2. 对象命名规则Oracle数据库对象一般按照以下原则命名,可适当简化,名字长度不能超过30。
1.2.1. 表数据库表的命名规则:1)表名一般用T_开头,表示为TABLE;2)系统表,加上SYS_,如:T_SYS_;基础表,加上INFO_,如:T_INFO_;日志表,加上LOG_,如:T_LOG_;配置表,加上CFG_,如:T_CFG_;备份表,加上BAK_前缀和时间后缀,如: BAK_T_OTHER_20130507;临时表,加上TMP_前缀和时间后缀,如:TMP_T_OTHER_20130507;3)多个单词间以下划线(_)进行连接,表示功能;如:T_LOG_ONLINE_PAYMENT,表示:在线交易日志表,这样很直观;4)入内存的表用C_开头,保证开发人员能够将正确的表初始化到应用程序的CACHE;如:C_INFO_MOBILE_H,这表示:该号段表是放在CACHE使用的。
SQL编写规范**公司ERP组SQL编写规范Author by DB小组1.写SQL注意事项1.1书写规范:1)S QL语句大小写: 所有数据库关键字和保留字均使用大写2)不允许把多个语句写在一行中,一行只写一条语句3)避免将复杂的SQL 语句写到同一行,建议要在关键字和谓词处换行4)相对独立的程序块之间必须加空行。
5)I NSERT语句中必须指定字段列表,防止表结构变化导致的错误1.2命名规范:1)不要使用数据库关键字和保留字创建对象名(如select 等)2)命名中不要使用中文和特殊字符,下划线可以使用.3)严禁使用空格给表和字段来命名4)创建对象时,对象名注意不要加双引号5)对象名称不要超过30个字符6)变量命名规定如下:i.函数或过程中所接收变量名称以P_开头,如create proc aaa(P_branchid in varchar2) ii.过程中所定义变量以V_开头,如declare v_branchid varchar2(3)7)E RP数据库对象命名必须加前缀以标识对象类型,规范如下:表(table)tb_视图(view) vw_ `序列(sequence) seq_簇(cluster) c_触发器(trigger) trg_存储过程(procedure) sp_函数(function) fun_物化视图(materialized view) mv_包和包体(package & package body) pkg_类和类体(type & type body) typ_主键(primary key) pk_外键(foreign key) fk_唯一索引(unique index) uk_普通索引(normal index) ix_位图索引(bitmap index) bi_同义词(synonym)依据所分配的表所属模块数据库链接(database link)根据所连接服务器特点指定名称1.3注释规范:1)在一般情况下,源程序有效注释量必须在30%左右,注释不宜太多也不能太少,注释语言需准确、易懂、简洁、精炼。
SQL语句的编写规范及最佳实践当今数据驱动的时代,SQL语言作为数据库操作的标准,被广泛应用于各类应用程序中。
但是,由于编写SQL语句的灵活性,很容易导致代码混乱、性能低下等问题。
为了更好地利用和优化数据库,本文将探讨SQL语句的编写规范及最佳实践。
一、规范书写规则在编写SQL语句时,遵循一定的规范书写规则是非常重要的。
下面是一些常见的规范:1. 语句格式化:为了提高可读性,每个关键字和操作符都应该单独一行,并且适当缩进。
这样做可以使语句更易于阅读和理解。
2. 表和字段命名:表名和字段名应具备描述性,尽量避免使用缩写或简写,保证可读性。
例如,使用"order_items"代替"oi"。
3. 大小写一致性:虽然SQL语言中不区分大小写,但是为了增强可读性,建议关键字、表名和字段名都使用相同的大小写规则。
4. 逗号的位置:当列名或表名超过一行时,逗号应该放在每一行的开头,在每个逗号后面添加一个空格。
5. 字符串引号:使用单引号来表示字符串值。
二、查询的最佳实践1. 使用JOIN代替子查询:在编写多表关联查询时,使用JOIN语句比子查询更高效。
JOIN操作可以减少查询次数,提高性能。
2. 减少SELECT中的列数:只选择需要的列,避免一次性选择所有列。
当表里的列很多时,选择性选择列可以提高查询性能。
3. 合理使用索引:索引可以大大提高查询性能,但过多的索引会降低插入、更新和删除的性能。
因此,需要根据实际情况选择合适的字段作为索引。
4. 使用INNER JOIN而不是OUTER JOIN:INNER JOIN只返回两个表中都有的匹配行,而OUTER JOIN会返回所有匹配行和未匹配行。
在性能要求较高的情况下,使用INNER JOIN可以提高查询效率。
5. 避免多次嵌套子查询:多次嵌套的子查询会导致查询性能下降。
可以考虑使用关联子查询或临时表替代。
6. 使用WHERE子句进行过滤:在查询中使用WHERE子句进行过滤可以减少返回结果集的大小,提高性能。
sql书写规范SQL(结构化查询语言)是一种用于处理关系型数据库的标准化语言。
在编写SQL查询语句时,遵循一定的书写规范可以提高代码的可读性、可维护性和可扩展性。
下面是SQL书写规范的一些基本原则和建议。
一、命名规范:1. 数据库、表、列的命名应具有描述性,能够清晰表达其含义。
2. 使用小写字母和下划线作为命名的分隔符,避免使用特殊字符和空格。
3. 命名要保持一致,避免使用缩写和简写,使用完整的单词。
二、缩进和空格:1. 使用适当的缩进,增加代码的可读性,通常每个缩进层级使用4个空格或一个制表符。
2. 在关键字、表名、列名、运算符等之间使用适当的空格,使其更易读。
如:SELECT column1, column2 FROM table_name WHERE condition。
三、注释:1. 在SQL语句中适时添加注释,解释代码的作用和意图,方便维护和理解。
2. 注释符号根据数据库的不同而异,通常是"--"和"/* */"。
如:SELECT column1, column2 -- 这是一个注释 FROM table_name;四、代码格式化:1. 使用大写字母表示SQL关键字,如SELECT、FROM、WHERE等。
2. 每个SQL语句都应该单独一行,并以分号结尾。
3. 当一行代码过长时,可以在适当的地方进行换行,增加代码的可读性。
4. 在二元运算符(如=、<>、<、>等)两边添加适当的空格,使其更易于阅读。
五、表达式和函数:1. SQL语句中的表达式和函数的书写应该尽可能简洁和清晰。
2. 使用括号明确表达式和函数的优先级。
3. 尽量避免在WHERE子句中使用函数,以提高查询性能。
六、SELECT语句:1. SELECT子句中应该指定查询的具体列,而不是使用通配符(*),这样可以减少不必要的数据量。
2. SELECT子句中的列应该按照一定的逻辑顺序排列,可以按照业务逻辑或者字母顺序排列。
SQL编写规范SQL编写规范1 DML语句1. 【强制】SELECT语句必须指定具体字段名称,禁⽌写成*。
因为select *会将不该读的数据也从MySQL⾥读出来,造成⽹卡压⼒。
且表字段⼀旦更新,但model层没有来得及更新的话,系统会报错。
2. 【强制】insert语句指定具体字段名称,不要写成insert into t1 values(…),道理同上。
3. 【建议】insert into…values(XX),(XX),(XX)…。
这⾥XX的值不要超过5000个。
值过多虽然上线很很快,但会引起主从同步延迟。
4. 【建议】SELECT语句不要使⽤UNION,推荐使⽤UNION ALL,并且UNION⼦句个数限制在5个以内。
因为union all不需要去重,节省数据库资源,提⾼性能。
5. 【建议】in值列表限制在500以内。
例如select… where userid in(….500个以内…),这么做是为了减少底层扫描,减轻数据库压⼒从⽽加速查询。
6. 【建议】事务⾥批量更新数据需要控制数量,进⾏必要的sleep,做到少量多次。
7. 【强制】事务涉及的表必须全部是innodb表。
否则⼀旦失败不会全部回滚,且易造成主从库同步终端。
8. 【强制】写⼊和事务发往主库,只读SQL发往从库。
9. 【强制】除静态表或⼩表(100⾏以内),DML语句必须有where条件,且使⽤索引查找。
10. 【强制】⽣产环境禁⽌使⽤hint,如sql_no_cache,force index,ignore key,straight join等。
因为hint是⽤来强制SQL按照某个执⾏计划来执⾏,但随着数据量变化我们⽆法保证⾃⼰当初的预判是正确的,因此我们要相信MySQL优化器!11. 【强制】where条件⾥等号左右字段类型必须⼀致,否则⽆法利⽤索引。
12. 【建议】SELECT|UPDATE|DELETE|REPLACE要有WHERE⼦句,且WHERE⼦句的条件必需使⽤索引查找。
SQL编码规范1 ⽬的为了保证所每个项⽬组编写出的程序都符合相同的规范,便于理解和维护,便于检查、减少出错概率,有助于成员间交流,保证⼀致性、统⼀性⽽建⽴的SQL程序编码规范。
2 范围该规范适⽤于所有需要基于SQL开发的项⽬。
3 规范内容3.1 命名规范3.1.1 总体命名规范l 名称的长度不超过32个字符。
l 名称采⽤英⽂单词、英⽂单词缩写和数字,单词之间⽤“_”分隔。
说明:除⾮⽤户提供⽂档化的⾏业标准(例如,国标或部颁标准),否则不得违反本规范。
l 数据库对象名称⾸字母必须⼩写。
l 不得采⽤“_”作为名称的起始字母和终⽌字母。
l 名称必须望⽂知意。
l 名称不得与数据库管理系统保留字冲突。
l 不要在对象名的字符之间留空格。
3.1.2 数据库名l 数据库名定义为系统名+模块名,或直接采⽤系统名。
l 数据库名全部采⽤⼩写。
3.1.3 数据库⽂件l 数据⽂件命名采⽤数据库名+_+⽂件类型+[⽂件序号].⽂件后缀,⽂件序号为1、2、3…9等数值,当数据库中某⼀⽂件类型的⽂件有多个时加上⽂件序号以区别。
只有⼀个时可不加。
l ⽂件后缀:主数据⽂件为.mdf,其它数据⽂件为.ndf,⽇志⽂件为.ldf。
l ⽂件名全部采⽤⼩写。
3.1.4 表表命名要遵循以下原则:l 采⽤“系统名+_+t_+模块名+_+表义名”格式构成。
l 若数据库中只含有单个模块,命名可采⽤“系统名+t_+表义名”格式构成。
l 整个表名的长度不要超过30个字符。
l 系统名、模块名均采⽤⼩写字符。
l 模块名或表义名均以其英⽂单词命名,且字符间不加分割符;表义名中单词的⾸字符⼤写,其它字符⼩写,多个单词间也不加任何分割符,单词全部采⽤单数形式。
l 表别名命名规则:取表义名的前3个字符加最后⼀个字符。
如果存在冲突,适当增加字符(如取表义名的前4个字符加最后⼀个字符等)。
l 关联表命名为Re_表A_表B,Re 是Relative的缩写,表A 和表B均采⽤其表义名或缩写形式。
SQL脚本编码规范 V1.01、SQL脚本注释规范:-- =============================================-- Author: js-- Create date: 2010-01-14-- Description: 针对采购单(新)的入库审核及取消入库审核进行库存的减少与增加。
-- 视图主键名: gwbh【仅对视图有意义】-- Modified by JS, 2011-01-05: 修改了XXXXX。
-- Modified by JS, 2011-05-05: 修改了XXXXX,更正了XX处错误。
-- =============================================2、视图命名规范:形如:cggl_cgdd_v,“cggl”表明视图所属的功能是“采购管理类”、“cgdd”表明视图对应的具体业务是“采购订单”业务。
3、函数命名规范:形如:f_getCgdj,见明知义——本函数返回值是一个产品的成本单价(f_getCgdjOfCpbh则更明确)。
4、触发器命名规范:形如:t_saleOrders_U、t_ saleOrders_I、t_ saleOrders_D,分别表示的是:在表saleOrders被“更新(update)”、“插入(insert)”、“删除(delete)”时被触发(分别明确对应于触发器的实际定义类型)。
5、存储过程命名规范:形如:p_OpenfireRosterMgr,见名知义——表明本存储过程实现的处理是完成Openfire(Openfire是一款基于XMPP协议的服务端程序名称)的用户列表(Roster)管理功能。
附录:式例如下。
sql创建规则SQL创建规则一、概述SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言,它具有创建、查询、更新和删除数据库中数据的能力。
在使用SQL创建规则时,需要遵循一定的规范和约束,以确保数据库的结构和数据的完整性。
二、表的创建规则1. 表名:表名应具有描述性,能够清晰地表达表的含义和作用。
表名应使用大写字母和下划线组成,避免使用特殊字符和空格。
2. 字段名:字段名应具有描述性,能够清晰地表达字段的含义和作用。
字段名应使用小写字母和下划线组成,避免使用特殊字符和空格。
3. 字段类型:根据数据的实际需求,选择合适的字段类型,如整数型、字符型、日期型等。
应避免使用过长或过短的字段类型,以节省存储空间和提高查询效率。
4. 主键:每个表应设置一个主键,用于唯一标识表中的每条记录。
主键应选择字段的唯一且不可更改的属性,如自增长的整数型字段。
5. 约束:根据实际需求,可以为表和字段设置约束,如唯一约束、非空约束等。
约束可以确保数据的完整性和一致性。
三、索引的创建规则1. 索引字段:选择适合作为索引的字段,通常是经常被查询或排序的字段。
应避免过长的字段或含有大量重复值的字段作为索引字段。
2. 索引类型:根据查询需求和数据特点,选择合适的索引类型,如普通索引、唯一索引、组合索引等。
不同的索引类型有不同的使用场景和效果。
3. 索引覆盖:尽可能使用索引覆盖查询,即通过索引就能获取到查询结果,而不需要再访问数据表。
这样可以提高查询效率和减少IO 开销。
四、视图的创建规则1. 视图名称:视图名称应具有描述性,能够清晰地表达视图的含义和作用。
视图名称应使用大写字母和下划线组成,避免使用特殊字符和空格。
2. 视图查询:视图的查询语句应尽量简洁明了,避免使用复杂的连接操作和子查询。
视图的查询结果应与相关数据表的字段对应,确保数据的一致性。
3. 视图更新:视图可更新性应根据实际需求进行设置,可以选择允许或禁止对视图进行更新操作。
Sql代码规范说明对于程序⼯作者来说,代码的阅读必不可少,好的代码让⼈读起来⼀⽬了然、神清⽓爽,做代码调试也可以很开的捋顺逻辑定位问题,但是如果遇到⼀些可读性较差,毫⽆规矩可⾔的代码,那真的⽐吃了翔都难受啊,如果再让你在这个基础上做点东西或者持续维护这些代码,真的能让⼈憋屈死,所以代码的书写必须条理清晰,遵循规矩,虽说SQL 的代码语法相⽐其他的java、python 等⾼级语⾔要差了⼏个档,但是对于⼀门数据查询语⾔来说,语法简答并不意味着没有结构可⾔,接下来我们共同学习⼀下SQL 的代码规范。
我们分别从代码的注释、主体结构和最终的脚本命名三个⽅⾯讨论SQL 的规范:代码的注释:1、代码块的注释使⽤ " /* .... */“ 每个SQL 查询代码的开始段,必须对整个代码进⾏简单的说明,说明内容包括:书写⼈、业务内容、书写时间、注意事项等;2、不换⾏的简单注释,在注释⽂字前⽤" -- “ 1)针对字段的解释,放到这个字段后⾯; EG:count(distinct salesNo) as CustNum -- 统计是客流量 2)针对⾏的解释,⼀般会单独取⼀⾏,避免某⾏代码过长; EG :-- 2017年7⽉2号计算每个会员购买⾦额占总体⾦额的⽐ 主体结构规范: 1、查询相关关键字单独再起⼀⾏;select /from /where/group by /having/order by; 2、select 之后的字段之间使⽤ ‘,’分隔,逗号统⼀放到各字段的前⾯或者后⾯; 3、select 的相关字段,⼀般是缩进4个空格或者6个空格; 4、代码的分号⼀般放到代码的结尾; 5、对于⼦查询嵌套使⽤规则: 1)⼦查询语句使⽤()进⾏包裹,⼦查询语句单独另起⼀⾏; 2)同⼀级别的⼦句内部要对齐; 6、表别名命名规则: 1)表⼀定要有别名例如:单个字母,字母加数字; 2)多个表(t特别是有⼦查询嵌套查询)在关联的时候有相应临时表命名有顺序,例如:t1,t2,t3;A,B,C;脚本命名 1)代码开发完成后,及时进⾏代码保存; 2)⽂件格式:.sql 结尾脚本命名; 3)名字缩写+内容+⽇期;。
SQL编程规范整理⼀、排版规范1.代码缩进对于判断、循环等处理使⽤字符缩进缩进的空格最好不要使⽤TAB键2.空格及换⾏变量定义、相对独⽴的程序块等要单独成⾏,便于阅读太长的程序(超过110列)应做换⾏处理操作符前后加⼊空格3.书定习惯不同操作类型的操作符⽤括号隔离表、字段别名⽤意义的名称替代所有书写使⽤⼤写,⽅⾯移植⼆、命名规范1.存储过程”SP_“作为前缀2.函数“F_”作为前缀3.触发器“TR_”作为前缀4.视图“V_”作为前缀5.链接服务“LNK_”作为前缀6.主键“PK_”作为前缀,表名在后,如:PK_表名7.外键“FK_”作为前缀,主表名,从表名,如:FK_主表_从表8.索引“ID_”作为前缀,列名在后,如:ID_COLNAME9.序列“SEQ_”作为前缀三、通⽤SQL性能优化1.索引使⽤尽量使⽤“>=”或,不要使⽤“>”LIKE尽量前端匹配尽量不要使⽤“<>”条件中不要使⽤函数条件中不要使⽤计算条件中尽量不要使⽤NOT尽量避免使⽤OR合理利⽤复合索引2.SQL优化避免使⽤复合SQL语句(如:SELECT A,B FROM TABLE1 WHERE A IN )(SELECT A1 FROM TABLE2))尽量避免使⽤DISTINCT尽量避免直接使⽤⾃定义函数对于查询⽐较复杂,数据量较⼤的查询,可以使⽤⼯具进⾏查询计划检测,调整语句性能不要在存储过程或函数中反复访问同⼀张表,如果需要,可以将数据放在临时表中使⽤。
应尽量减少控制语句的检查次数,以提⾼执⾏效率如果能从⼀条SQL语句中获取多个想要的数据,就不要分多条SQL语句分分次获取在长度和精度和精度允许的情况下,建议⽤INTERGE代替NUMERIC,在可以提⾼性能的情况下,使⽤EXISTS代替IN,NOT EXISTS 代替NOT IN查询的WHERE过滤原则,应使过滤记录数最多的条件多表连接查询时,可以先按条件过滤在进⾏连接select、insert⼦句的代码中不允许出现“*”以代替查询所有字段,必须⽤实际的字段名代替提⾼GROUP BY的执⾏效率,在进⾏GROUP BY 之前将不需要条件过滤掉。
SQL编码规范(V1.00)目录1注释规范 (6)1.1.一般性注释 (6)1.2.函数文本注释 (6)2.排版格式 (7)2.1.缩进 (7)2.2.换行 (8)2.3.空格 (10)2.4.大小写 (10)2.5.对齐 (10)3.命名规则 (10)3.1.输入变量 (10)3.2.输出变量 (11)3.3.内部变量 (11)3.4.游标命名 (11)4.编码规范 (11)4.1.不等于统一使用"<>" (13)4.2.使用表的别名 (13)4.3.使用SELECT语句时,必须指出列名 (14)4.4.使用INSERT语句时,必须指定插入的字段名。
(14)4.5.减少子查询的使用 (14)4.6.适当添加索引以提高查询效率 (14)4.7.不要在WHERE字句中对索引列施以函数 (14)4.8.不要使用数据库的类型自动转换功能,使用显式的类型转换 (14)4.9.应使用变量绑定实现SQL语句共享,避免使用硬编码 (14)4.10.用执行计划分析SQL性能 (16)附录A:Oracle SQL性能优化 (16)A.1选用适合的ORACLE优化器 (16)A.2访问TABLE的方式 (17)A.3共享SQL语句 (17)A.4选择最有效率的表名顺序(只在基于规则的优化器中有效) (19)A.5WHERE子句中的连接顺序 (20)A.6SELECT子句中避免使用‘ * ‘ (21)A.7减少访问数据库的次数 (21)A.8使用DECODE函数来减少处理时间 (23)A.9整合简单,无关联的数据库访问 (23)A.10删除重复记录 (24)A.11用TRUNCATE替代DELETE全表记录 (25)A.12尽量多使用COMMIT (25)A.13计算记录条数 (25)A.14用Where子句替换HAVING子句 (25)A.15减少对表的查询 (26)A.16通过内部函数提高SQL效率 (27)A.17使用表的别名(Alias) (29)A.18用EXISTS替代IN (29)A.19用NOT EXISTS替代NOT IN (30)A.20用表连接替换EXISTS (31)A.21用EXISTS替换DISTINCT (31)A.22识别'低效执行'的SQL语句 (32)A.23使用TKPROF 工具来查询SQL性能状态 (33)A.24用EXPLAIN PLAN 分析SQL语句 (33)A.25用索引提高效率 (35)A.26索引的操作 (36)A.27基础表的选择 (38)A.28多个平等的索引 (38)A.29等式比较和范围比较 (39)A.30不明确的索引等级 (40)A.31强制索引失效 (41)A.32避免在索引列上使用计算 (42)A.33自动选择索引 (43)A.34避免在索引列上使用NOT (43)A.35用>=替代> (45)A.36用UNION替换OR (适用于索引列) (45)A.37用IN来替换OR (49)A.38避免在索引列上使用IS NULL和IS NOT NULL (50)A.39总是使用索引的第一个列 (51)A.40ORACLE内部操作 (52)A.41用UNION-ALL 替换UNION ( 如果有可能的话) (52)A.42使用提示(Hints) (54)A.43用WHERE替代ORDER BY (55)A.44避免改变索引列的类型 (56)A.45需要当心的WHERE子句 (57)A.46连接多个扫描 (59)A.47CBO下使用更具选择性的索引 (60)A.48避免使用耗费资源的操作 (61)A.49优化GROUP BY (62)A.50使用日期 (62)A.51使用显式的游标(CURSORs) (63)A.52优化EXPORT和IMPORT (63)A.53分离表和索引 (64)1注释规范1.1. 一般性注释1.1.1.创建每一数据库对象时都要加上COMMENT ON注释,以说明该对象的功能和用途;建表时,对某些数据列也要加上COMMENT ON注释,以说明该列和/或列取值的含义。
项目开发SQL规范说明目录1引言 (3)1.1编写背景 (3)1.2规范存在的意义 (3)1.3编写目的 (3)1.4适用范围 (3)1.5目标读者 (3)2规范 (4)2.1基本命名规范 (4)2.1.1命名规范 (4)2.1.2创建表、索引时,要指定表空间 (4)2.1.3主键、索引、外键都设计完整。
(4)2.1.4字段类型规约 (4)2.1.5注释与格式化 (5)2.2SQL编写格式规范 (5)2.3SQL编写注意事项 (11)2.3.1表或试图使用注意事项 (11)2.3.2索引使用注意事项 (12)2.3.3临时数据库表使用注意事项 (12)2.3.4函数或算法使用注意事项 (13)3常用的一些错误使用例子 (13)4备注 (15)1引言1.1编写背景由于目前项目开发虽然有自己的一套规范,但部分规范不够详细,使得开发人员在项目开发中,编写的代码难以阅读,程序执行效率低,使得后期的项目维护比较困难。
另外项目开发过程中,涉及到各部门之间的配合,一些问题的查找定位,以及各部门之间所编写的程序在对接方面如何保持程序的良好性,阅读性使得程序的维护、执行效率更高效。
1.2规范存在的意义1.好的编码规范可以尽可能的减少一个软件的维护成本, 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护;2.好的编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码;3.好的编码规范可以最大限度的提高团队开发的合作效率;4.长期的规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维;5.良好的编码能提高程序执行效率,减少程序维护难度。
1.3编写目的由于每个开发人员所处环境不同、技术水平高低不同,其编写的sql 不同导致程序执行效率相差很大;因此对一些常用的sql 编写注意事项做归纳整理、以提高程序员的SQL能力,从而提高程序执行效率。
1.4适用范围1用于公司所有项目的开发设计工作、代码质量审查者、编码程序员, 项目经理等2 数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人3 默认,要求所有项目中的所有成员遵守。
1.5目标读者1项目经理、开发人员、代码质量审查人员、项目设计员、数据库开发人员。
2 对SP(存储过程)优化的项目开发人员, 对数据库有浓厚兴趣人员.2规范2.1基本命名规范2.1.1命名规范1)所有对象命名,单词之间以下划线“_”分隔开2)表命名:模块_实体名_实体附加名如,基础框架相关的表统一以RH_开头,如基础框架下面的系统日志功能模块相关表,可命名为RH_SYSLOG、RH_SYSLOG_TYPE等; 各应用系统以”系统名称”+”_”+表标示名来进行命名.3)主键以PK_开头,其他索引名称以IDX_开头; 命名方式: IDX_表名称_字段名4)序列以SEQ_开头,命名方式: SEQ_表名称5)表空间以TS_开头;6)视图名称以V_开头;命名方式: V_应用系统名称_试图实体附件名称或V_表实体名称(备注: 表实体名称中包含了应用系统名称)7)存储过程名称以PRO_开头: PRO_应用系统名称_存储过程8)触发器名称以Tri_开头: Tri_表实体名称. (备注:表实体名称中包含了应用系统名称) 2.1.2创建表、索引时,要指定表空间没有表空间,说明设计不够完整,增加后期维护的难度。
2.1.3主键、索引、外键都设计完整。
创建表时一个表应有主键字段,一个活多个索引字段; 0或多个外键引用字段.2.1.4字段类型规约2.1.4.1 主键类型1)不考虑数据迁移,使用NUMBER作主键类型。
2)考虑数据迁移,使用VARCHAR(32)作为主键类型;使用varchar的好处是迁移数据时,主键仍可用。
如系统配置、自定义查询sql等,当从A系统导出,并导入B、C系统,如果用number类型主键,就必须要考虑主键重复的问题,而varchar则不用关心这个问题。
2.1.4.2 字符串类型长度由于VARCHAR2类型字段长度可任意设置,为了统一数据类型,在oracle数据库,,建议使用以下常见字段类型:CHAR(1)、VARCHAR2(32) 、VARCHAR2(100)、VARCHAR2(255)2.1.4.3 Oracle布尔类型字段使用Char(1)表示,须设置默认值Y或N,Y-true,N-false2.1.5注释与格式化1)表必须添加注释2)所有字段必须添加注释,如状态字段、类型字段、交互字段、命名不清晰的字段;并以枚举值说明编码表示值。
3)存储过程和函数的注释。
在存储过程、函数的开头,添加对象的描述信息/****************************************************************************** NAME: eqm_common_utilsPURPOSE:设备台帐公用程序包,包含设备台帐处理需要的公共存储过程和方法REVISIONS:Ver Date Author Description--------- ---------- --------------- ------------------------------------1.0 2009-2-9 xdan 1. Created this package body.1.1 2010-12-9 xdan2. 添加函数xxxx******************************************************************************/ 4)在PL/SQL Developer、Toad等工具中编写存储过程、函数时,一定要格式化。
SQL 语法基本规范2.2S QL编写格式规范一、查询的逻辑执行顺序(1)FROM left_table(2)join_type JOIN right_table (2) ON join_condition(3)WHERE where_condition(4)GROUP BY group_by_list(5)WITH {cube | rollup}(6)HA VING having_condition(7)SELECT (9) DISTINCT (11) top_specification select_list(8)ORDER BY order_by_list标准的SQL 的解析顺序为:(1)FROM 子句组装来自不同数据源的数据(2)WHERE 子句基于指定的条件对记录进行筛选(3)GROUP BY 子句将数据划分为多个分组(4)使用聚合函数进行计算(5)使用HA VING子句筛选分组(6)计算所有的表达式(7)使用ORDER BY对结果集进行排序二、执行顺序1FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt12ON: 对vt1表应用ON筛选器只有满足join_condition 为真的行才被插入vt23OUTER(join):如果指定了OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2,生成t3,如果from包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束。
4WHERE:对vt3应用WHERE 筛选器只有使where_condition 为true的行才被插入vt45GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt56CUBE|ROLLUP:把超组(supergroups)插入vt6,生成vt67HA VING:对vt6应用HA VING筛选器只有使having_condition 为true的组才插入vt78SELECT:处理select列表产生vt89DISTINCT:将重复的行从vt8中去除产生vt910ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc1011TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者备注:看到这里,那么用过Linq to SQL的语法有点相似啊?如果我们我们了解了SQL执行顺序,那么我们就接下来进一步养成日常SQL的好习惯,也就是在实现功能的同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所谓集合运算实际就是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL语句或者存储过程代替。
三、只返回需要的数据返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:1.横向来看(1) 尽量不要写SELECT * 的语句,而是选择你需要的字段。
(2) 当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上。
这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。
如有表table1(ID,col1)和table2(ID,col2)1)Select A.ID, A.col1, B.col22)-- Select A.ID, col1, col2 –尽量不要这么写,不利于将来程序扩展3)from table1 A inner join table2 B on A.ID=B.ID Where …2.纵向来看(1) 合理写WHERE子句,不要写没有WHERE的SQL语句。
(2) SELECT TOP N * -- 没有WHERE条件的用此替代(oracle :select * from tableNamewhere rownum<N ; * 换成相应要查询的字段)。
四、尽量少做重复的工作1.控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的。
2.减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。
3.杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。
4.合并对同一表同一条件的多次UPDATE,比如UPDATE EMPLOYEE SET FNAME='HAIWER'WHERE EMP_ID=' VPA30890F' UPDATE EMPLOYEE SET LNAME='YANG' WHEREEMP_ID=' VPA30890F'这两个语句应该合并成以下一个语句UPDATE EMPLOYEE SET FNAME='HAIWER',LNAME='YANG' WHERE EMP_ID=' VPA30890F'5.UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。