源战役
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
SisMaker 99e9725fb2 ft: 修复了一张表结构 3 weeks ago
..
19-10 ft: 初始提交 4 weeks ago
19-11 ft: 初始提交 4 weeks ago
19-12 ft: 初始提交 4 weeks ago
20-01 ft: 初始提交 4 weeks ago
20-02 ft: 初始提交 4 weeks ago
20-03 ft: 初始提交 4 weeks ago
20-04 ft: 初始提交 4 weeks ago
20-05 ft: 初始提交 4 weeks ago
20-06 ft: 初始提交 4 weeks ago
20-07 ft: 初始提交 4 weeks ago
20-08 ft: 初始提交 4 weeks ago
20-09 ft: 初始提交 4 weeks ago
20-10 ft: 初始提交 4 weeks ago
20-11 ft: 初始提交 4 weeks ago
20-12 ft: 初始提交 4 weeks ago
21-01 ft: 初始提交 4 weeks ago
21-02 ft: 初始提交 4 weeks ago
21-03 ft: 初始提交 4 weeks ago
21-04 ft: 初始提交 4 weeks ago
21-05 ft: 初始提交 4 weeks ago
21-06 ft: 初始提交 4 weeks ago
21-07 ft: 初始提交 4 weeks ago
db_tags ft: 起送初始化 4 weeks ago
README.md ft: 初始提交 4 weeks ago
yzygame.sql ft: 修复了一张表结构 3 weeks ago

README.md

SQL脚本规范

huangyongxing
2020-07-23

特别注意:

  • 一般SQL脚本,后续部署到正式服机器,会按顺序执行

  • 为便于统一版本管理和对比差异,要求SQL内容提交到不同分支时,采用原始的日期文件名,不要重新命名。部分提交时,脚本内容应处于文件中相对应的位置(不要一边在文件头部,一边在文件尾部等)

规范要求

  1. 通常新建用户数据表,不能在前面添加 DROP 表的语句,例如:
  • 错误用法:
DROP TABLE IF EXISTS `example`;
CREATA TABLE `example` (
  ...
) ...;
  • 正确用法:
CREATE TABLE `example` (
  ...
) ...;

理由:这是由于运维那边曾经发生过脚本错误或操作失误,会导入历史SQL。在这种情况下,如果有DROP表的语句,就会把正式服玩家数据清除掉,导致需要回档处理。

其实基于这一原因,通常对数据做更新的操作不应该出现在SQL脚本中,应只保留表结构相关语句。 但是事实上,有时候不得不更重建表结构或有一些重要的数据修正操作,这类则按实际需要添加。运维那边也加强了验证,尽可能避免此类问题发生。

  1. 用户数据表使用InnoDB引擎和utf-8编码,一般应有主键,非必要尽量不使用联合主键,应有必要的字段注释和表注释
  • 示例:
CREATE TABLE `guild_war_guild_rank` (
  `rank` int(11) NOT NULL COMMENT '排名',
  `guild_id` int(11) NOT NULL COMMENT '帮派ID',
  `guild_name` varchar(50) NOT NULL COMMENT '帮派名字',
  `room` tinyint(3) NOT NULL COMMENT '战区',
  `score` int(11) NOT NULL COMMENT '积分',
  PRIMARY KEY (`rank`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='帮派积分榜';
  1. 注意SQL应是完整可运行的SQL语句,不要遗漏最后的分号或书写不规范的SQL语句

正式服上会执行这些SQL语句,如果遗漏分号,会导致正式服更新失败 其他可能影响SQL正常执行的情况同样要避免

  1. 注释应使用标准格式
-- 注释风格1 - 推荐风格(注意,行首两个-之后,有一个英文字符的空格)

# 注释风格2

SELECT `id` /* 注释风格3: 我是语句中间的注释 */ FROM `example` LIMIT 1;

其中,#号开头的注释以及SQL语句中间的注释/* */在项目中一般不使用

  1. SQL文件应以“YY-MM-DD.sql”的形式命名,放在目录名为“YY-MM”的目录下,便于工具自动按序合并SQL脚本。其中,YY表示2位数字年份,MM表示2位数字月份,DD表示2位数字日期。
# 正确命名:
17-06/17-06-07.sql

# 错误命名:
17-6/17-6-7.sql
  1. 文件统一使用UTF-8编码(不带BOM签名),换行符使用UNIX风格 (即\n换行)。

不要使用Windows的记事本直接编辑保存SQL脚本,记事本有几点问题:

  • 可能编码不对(一般是ANSI码直接保存,在中文系统即采用GBK编码),换行符风格(\r\n)不对
  • 即使使用UTF-8编码,保存时仍会自动在文件头加BOM签名,在LINUX环境下,会引起问题
  • 如果一行过长,使用快捷键Ctrl+S保存会引起自动断行,可能导致SQL语句有误

使用其他编辑器的,注意设置工具使用正确的编码和换行符风格。

  1. 文件以开发时提交的命名为准,合并提交到其他分支时不要重新命名,保持原来的文件名及内容在该文档中的对应位置,力求各版本使用相同的文件名、文件内容(更新到同一版本时)。

使用相同的文件名及文档中位置,便于对版本进行管理,检查和提取版本差异,排查错误操作等。