SQL编写规范

这篇具有很好参考价值的文章主要介绍了SQL编写规范。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.命名规范:

1.库名、表名、字段名,必须使用小写字母或数字,不得超过30个字符。

2.库名、表名、字段名,禁止出现数字开头,禁止两个下划线中间只出现数字。(说明: MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名 ,都不允许出现任何大写字母,避免节外生枝 正例: aliyun _ admin , rdc _ config , level 3_ name 反例: AliyunAdmin , rdcConfig , level 3 name)

3.库名、表名、字段名,必须见名知意,使用下划线分割,禁止使用MySQL保留字 ,如 desc 、 range 、 match 、 delayed 等,请参考 MySQL 官方保留字。

4.临时库、表名,必须以tmp为前缀,以日期为后缀,例如tmp_product_20130704 。

5.普通索引必须按照“idx_字段名称[_字段名称]”进行命名,例如idx_creator_id

6.唯一索引必须按照“uniq_字段名称[_字段名称]”进行命名,例如 uniq_creator_id。

7.索引名必须全部使用小写,过长的字段名可以采⽤缩写形式,例如 idx_creator_id_time。

8.表的命名最好是加上“业务名称_表的作用”。

9.库名与应用名称尽量一致。

2.库表设计:

1.所有字段及表都必须有注释,存储引擎必须使用InnoDB。

  1. 建表时表必须有主键,使用bigint unsigned类型,并使用auto_increment自增 标记,且不要修改主键的值。(说明:线上数据库均采用InnoDB存储引擎,其为聚簇索引组织表,自增主键可以避免插入数据过程中page的分裂 合并,减少表碎片化,提高空间和内存使用,提高插入数据的性能。另外避免在row模式下主从复制异常。)

3.必须使用DECIMAL代替FLOAT和DOUBLE,以存储精确浮点数,例如支付相关数据。(说明: float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存 储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。)

4.必须使用TINYINT系类型代替ENUM类型,前者只要自己定义,后者却要修改表。

5.禁止使用BLOB类型。

6.所有字段必须定义为NOT NULL,默认值定义为default 0或default ‘’。

  1. 表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1 表示是,0 表示否)(阿里巴巴实体类命名不建议对于boolean型变量命名以is开头,原始是:部分框架解析会引起序列化错误。)。

8.禁止隐式转换,数值类型禁止加引号,字符和日期类型必须加引号。(说明:当关联条件数据类型不一致的时候走不了索引。)

9.禁止使用外键,防止死锁,避免隐藏的数据逻辑,一切外键概念必须在应用层解 决。

10.禁止使用存储过程及视图,其难以调试和扩展,更没有移植性。

11.建议最多更改和查询的字段放在基础表内,方便完整载入内存。

12.建议访问频率低的或大字段放到扩展表里,分离冷热数据。

13.尽可能不使用TEXT类型。

14.在满足需求的前提下,varchar字段尽量使用最少的字符数量,越少越有利,建议 最多不要超过500个字符。

15.如果存储的字符串长度几乎相等,建议使用char定长字符串类型。

16.数据量随时间增长的表,需要考虑做好历史数据的归档。

3.查询数据:

1.只查询需要的字段,禁止使用select * ,子查询只允许返回主键和必须字段,禁 止select *。(说明:禁用select *,1、避免表结构变更导致程序因找不到相关字段报错,2、尽可能减少查询需要传输的IO流, 加快查询速度。)

2.统计行数时,使用COUNT(*)或COUNT(1),禁止使用count(字段名)。(说明: count( * ) 会统计值为 NULL 的行,而 count( 列名 ) 不会统计此列为 NULL 值的行,造成统计不准确。)

3.禁止使用order by rand()实现乱序效果,会导致CPU过高。

4.分批获取大量数据时,禁止大偏移量的limitM,N语句,使用主键游标where PK>…limit N或利用延迟关联、子查询优化超多分页场景。

5.必须使用ISNULL()来判断是否为NULL值。

6.在代码中写分页查询逻辑时,若 count 为 0 必须直接返回,避免执行后面的分 页语句。

7.需要 join 的字段,数据类型必须绝对一致,多表关联查询时,必须保证被关联的 字段需要有索引。

8.多张关联表之间,建议适当的冗余字段,可以减少JOIN查询。

9.尽量避免使用反向匹配,例如notin、!=、notlike,无法用到索引。

10.同字段OR条件,用IN代替,包含的值个数应少于300个。

11.尽量减少与数据库交互次数,尽量采用批量递交、块插入和缓存(memcache)。

12.使用prepared statement批量递交语句,可以提升性能,且避免SQL注⼊。

13.尽量避免在SQL中进行算术和函数计算,应放置到应用服务器端。

14.可以拆分复杂的JOIN为多个小SQL,避免大语句。

4.修改数据:

1.同一张表ALTER多个字段,必须将需要修改的字段拼接成一条sql执行,如ALTER TABLE table_name drop column …, add column…,…。

2.写入语句中禁止出现结果不确定的函数,如sysdate()、rand()、current_user() 等。

3.数据订正(特别是删除、修改记录操作)时,必须先select,避免出现误删除, 确认无误才能执行更新语句。

4.INSERT语句必须指定字段列表,禁止使用INSERT INTO xxx values ()。

5.DELETE和UPDATE语句,必须要有where条件,不要产生全表更新和删除的语 句。

6.禁止单条SQL语句同时更新多个表,拆分成多条SQL,放在一个事务里。

7.有批量写入数据需求,尽量使用INSERT INTO xxx values (…),(…),(…)…形式,且 保证一次批量的数据在1M以内。

8.程序应有捕获SQL异常的处理机制,必要时通过rollback显式回滚。

9.尽量避免大事务,这会锁住更多的资源,引发更多的等待和竞争。

10.不同事务对同一批表的操作,要前后顺序一致。

5.索引创建:

1.执行频率高的SQL和重要功能的SQL,都必须能有索引可用。

2.多表JOIN的字段,都必须建有索引。

3.页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

4.禁止冗余索引,如已有(a,b)索引,则无需(a)索引。

5.组合索引中,区分度大(高筛选度)的字段必须放在最前。

6.业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。

7.如多个字段组合有唯一性需要,可以创建唯一索引。

8.尽可能利用索引完成排序,即排序的字段在索引里,且不使用降序排序。

9.适度将组合索引提升为覆盖索引,避免回表,减少IO。

10.对较长字符串可使用前缀索引,前缀索引长度由数据区分度确定。

11.建议不在低基数(低筛选度)的列上建立索引,例如“性别”。

12.合理创建组合索引,(a,b,c)相当于(a)、(a,b)、(a,b,c),组合索引的组成字段数尽量 不超过3个。文章来源地址https://www.toymoban.com/news/detail-623137.html

到了这里,关于SQL编写规范的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL Server 数据库之SQL Server 数据库的安全设置

    数据库服务器是所有应用的数据中转站,若数据库服务被恶意攻击,可能会造成数据泄露、数据丢失、数据被恶意篡改等诸多无法挽回的损失; 所以,对数据库进行安全设置是每一个数据库管理人员都应掌握的知识; SQL Server 登录模式分为 “Windows 身份验证模式” 和 “SQL

    2024年02月06日
    浏览(73)
  • SQL Server数据库使用SQL Server代理实现数据库自动备份

    在现实中,为了保证数据的安全和完整,防止人为错误和硬件故障等造成的数据丢失和损坏,就需要用到数据库的备份,不同的数据库方法有所差别,我这边主讲SQL Server数据库的备份和使用SQL Server代理作业实现数据库的定时备份。 目录 一、开启SQL Server代理 1、找到SQL Serv

    2024年02月09日
    浏览(76)
  • 【数据库·关系数据库标准语言SQL·学习笔记】Microsoft SQL Server数据库的建立和删除

    开发环境:SQL Server Management Studio(SSMS) 利用数据库对象资源管理器创建数据库 (1)右击对象资源管理器中的数据库,选择新建数据库 (2)在新建数据库界面输入数据库名称 ,并选择确定 利用CREAT DATABASE命令在SSM工具的新建查询中创建数据库 1.语法格式 CREATE DATABASE dat

    2024年02月08日
    浏览(56)
  • sql数据库怎么备份,sql 实时备份

    在当今互联网时代,数据已经成为企业的核心资产。然而,数据的安全性和完整性面临硬件问题、软件故障、人工操作错误等各种威胁。为了保证数据的安全,实时备份已经成为公司必须采取的重要措施之一。下面我们就重点介绍SQL实时备份的重要实施方法。 SQL实时备份的必

    2024年02月10日
    浏览(58)
  • SQL Server数据库——创建数据库

    目录 一、界面方式创建数据库 1.1创建数据库xscj,数据文件和日志文件的属性按默认值设置  1.2在xscj数据库中增加文件xcsj1,其属性均取系统默认值  1.3在数据库xscj中增加一个名为myGroup的文件组。 1.4数据库的重命名  1.5数据库的删除  二、命令方式创建数据库 以创建学生管

    2024年02月01日
    浏览(63)
  • sql 创建sql server数据库文件组

    可以在建立数据库时候创建 如: CREATE DATABASE MyDB ON PRIMARY                           --主文件组和主要数据文件   ( NAME=\\\'MyDB_Primary\\\',    FILENAME= \\\'c:MyDB_Prm.mdf\\\'), FILEGROUP MyDB_FG1                   --用户定义文件组1   ( NAME = \\\'MyDB_FG1_Dat1\\\',    FILENAME = \\\'c:MyDB_FG1_1.ndf\\\'),  --次要数

    2024年02月08日
    浏览(61)
  • SQL数据库案例1——创建商店数据库

    创建商店数据库Commodities_Management 创建商品表、供应商表、进货表、销售表 各表分别输入数据 库名:Commodities_Management 字符集:utf16 表一:商品表 字段名 类型 长度 约束 商品编号 varchar 10 外键(参照进货表) 商品名 varchar 30 — 规格 varchar 20 — 供应商编号 varchar 10 非空 表二:

    2024年02月12日
    浏览(46)
  • SQL 数据库语句- 创建和管理数据库

    SQL CREATE DATABASE 语句用于创建一个新的 SQL 数据库。 以下 SQL 语句创建了一个名为 \\\"testDB\\\" 的数据库: 通过这个简单的语句,你可以成功地创建一个名为 \\\"testDB\\\" 的数据库。记得在实际应用中,你可能需要添加其他选项,比如指定字符集、校对规则等,以满足具体需求。 SQL DRO

    2024年02月05日
    浏览(76)
  • 数据库复试—关系数据库标准语言SQL

    SQL:结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 学生表Student( Sno ,Sname,Ssex,Sage,Sdept) 课程表Course( Cno ,Cname,Cpno,Ccredit) 学生选课表SC( Sno,Cno ,Grade) 数据建立 学生表数据 学号Sno 姓名 Sname 性别 Ssex 年龄 Sage 所在系 Sdept

    2024年01月24日
    浏览(57)
  • 【Sql】Sql Server 2008 数据库附加,错误:9004

    【问题描述】 数据库文件存在异常状况,有可能是因为硬盘有坏区引起的。 附加数据库的时候,提示错误9004。 【解决方法】 假设数据库名称为:UFDATA_001_2023 请按顺序执行以下步骤: 1、将数据库的文件名:UFDATA_001_2023复制到别的位置留作备用; 2、新建数据库:UFDATA_001_

    2024年02月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包