Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
gm-sql-rules
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
gm-sql-rules
Commits
afa0b913
Commit
afa0b913
authored
Aug 07, 2020
by
Chengyang Zhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update gm-sql-rules.md
parent
142540f1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
5 additions
and
27 deletions
+5
-27
gm-sql-rules.md
gm-sql-rules.md
+5
-27
No files found.
gm-sql-rules.md
View file @
afa0b913
...
@@ -8,7 +8,6 @@
...
@@ -8,7 +8,6 @@
4.
如果应用使用的是长连接,应用必须具有自动重连的机制。但请避免每执行一个 SQL去检查一次 DB 可用性。
4.
如果应用使用的是长连接,应用必须具有自动重连的机制。但请避免每执行一个 SQL去检查一次 DB 可用性。
5.
如果应用使用的是长连接,应用应该具有连接的 TIMEOUT 检查机制,及时回收长时间没有使用的连接。 TIMEOUT 时间一般建议为 20min。
5.
如果应用使用的是长连接,应用应该具有连接的 TIMEOUT 检查机制,及时回收长时间没有使用的连接。 TIMEOUT 时间一般建议为 20min。
6.
我们所有的 MySQL 数据库除历史原因外,都采用 UTF8MB4 编码。
6.
我们所有的 MySQL 数据库除历史原因外,都采用 UTF8MB4 编码。
7.
Mysql 对 DDL 支持很差,表结构推荐设计为 Key-Value 结构。如果是关系型结构的数据库,请尽量预留一些字段,如 value1 ,value2 ,value3。 ???
8.
原则上,Mysql用户名与数据库名字一样。涉及到各端使用相同db的,各自使用独立账户。
8.
原则上,Mysql用户名与数据库名字一样。涉及到各端使用相同db的,各自使用独立账户。
#### 命名
#### 命名
...
@@ -23,17 +22,12 @@ e) 命名全部采用小写,并且名称前后不能加引号。
...
@@ -23,17 +22,12 @@ e) 命名全部采用小写,并且名称前后不能加引号。
#### 1. 表
#### 1. 表
##### 表设计
##### 表设计
a) 在设计时尽量包含两个日期字段:gmt_created(创建日期),gmt_modified(修改日期)且非空, 对表的记录进行更新的时候,必须包含对 gmt_modified 字段的更新。
a) 在设计时尽量包含两个日期字段:gmt_created(创建日期),gmt_modified(修改日期)且非空, 对表的记录进行更新的时候,必须包含对 gmt_modified 字段的更新。
datetime, timestamp?
b) 必须要有主键,主键尽量用自增字段类型,推荐类型为 INT 或者 BIGINT 类型。
b) 必须要有主键,主键尽量用自增字段类型,推荐类型为 INT 或者 BIGINT 类型。
c) 需要多表 join 的字段,数据类型保持绝对一致。
c) 需要多表 join 的字段,数据类型保持绝对一致。
d) Mysql 的表尽量设置成 KV(Key-Value)结构,这样便于扩展和维护。
e) 当表的字段数非常多时,可以将表分成两张表,一张作为条件查询表,一张作为详细内容表(主要是为了性能考虑)。case by case
e) 当表的字段数非常多时,可以将表分成两张表,一张作为条件查询表,一张作为详
f) 当字段的类型为枚举型或布尔型时,建议使用 char(1)类型。??
细内容表(主要是为了性能考虑)。
g) 同一表中,所有 varchar 字段的长度加起来,不能大于 65535.如果有这样的需求,请使用 TEXT/LONGTEXT 类型。
f) 当字段的类型为枚举型或布尔型时,建议使用 char(1)类型。
g) 同一表中,所有 varchar 字段的长度加起来,不能大于 65535.如果有这样的需求,请
使用 TEXT/LONGTEXT 类型。
h) 由于 MYSQL 表 DDL 维护成本很高,所以在适当的时候,可以有一定的字段容余。
比如:Value1,Value2,Value3 这样的字段。
##### 表命名
##### 表命名
> 业务团队同学共同参与制定
> 业务团队同学共同参与制定
...
@@ -53,9 +47,6 @@ c) 布尔值类型的字段命名为 is+描述。如 member 表上表示是否
...
@@ -53,9 +47,6 @@ c) 布尔值类型的字段命名为 is+描述。如 member 表上表示是否
##### 字段注释
##### 字段注释
-
新增列、新建表,务必增加字段注释
-
新增列、新建表,务必增加字段注释
-
标准字段注释由一组"@"开头的标签+空格+文本组成。
以 MD_USER 表的部分字段为例:
![](
https://tva1.sinaimg.cn/large/007S8ZIlly1ggsonreafij30hd0u2751.jpg
)
![](
https://tva1.sinaimg.cn/large/007S8ZIlly1ggsonreafij30hd0u2751.jpg
)
...
@@ -67,26 +58,12 @@ c) 布尔值类型的字段命名为 is+描述。如 member 表上表示是否
...
@@ -67,26 +58,12 @@ c) 布尔值类型的字段命名为 is+描述。如 member 表上表示是否
1.
普通索引使用idx_
1.
普通索引使用idx_
2.
唯一索引使用uniq_开头
2.
唯一索引使用uniq_开头
#### 3. 约束
##### 设计
##### 命名
#### 4. 触发器
#### 5. 存储过程、函数
### SQL开发规范
### SQL开发规范
#### 1. 编码&格式规范
#### 1. 编码&格式规范
-
SQL代码格式化,尽可能的按照统一的格式
-
代码除字符串中为小写,其余全部大写
-
代码中不出现单独的括号行
-
表与表的关联只使用左连接和全连接,避免使用右连接,保证主表在前,从表在后的顺序,按照从左向右的思维逻辑,方便SQL业务逻辑的阅读
-
表与表的关联只使用左连接和全连接,避免使用右连接,保证主表在前,从表在后的顺序,按照从左向右的思维逻辑,方便SQL业务逻辑的阅读
...
@@ -94,6 +71,7 @@ c) 布尔值类型的字段命名为 is+描述。如 member 表上表示是否
...
@@ -94,6 +71,7 @@ c) 布尔值类型的字段命名为 is+描述。如 member 表上表示是否
-
同一级别的表关联,左侧缩进一致,并保证关键字右对齐
-
同一级别的表关联,左侧缩进一致,并保证关键字右对齐
-
在同一个变更中,不要同时进行DDL和DML
-
在同一个变更中,不要同时进行DDL和DML
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment