源战役
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

91 satır
3.7 KiB

  1. # SQL脚本规范
  2. <p align="right">huangyongxing<br />2020-07-23</p>
  3. <span style="color:red;">**特别注意:**</span>
  4. * 一般SQL脚本,后续部署到正式服机器,会按顺序执行
  5. * 为便于统一版本管理和对比差异,要求SQL内容提交到不同分支时,采用原始的日期文件名,不要重新命名。部分提交时,脚本内容应处于文件中相对应的位置(不要一边在文件头部,一边在文件尾部等)
  6. ## 规范要求
  7. 1. 通常新建用户数据表,不能在前面添加 DROP 表的语句,例如:
  8. + 错误用法:
  9. ```sql
  10. DROP TABLE IF EXISTS `example`;
  11. CREATA TABLE `example` (
  12. ...
  13. ) ...;
  14. ```
  15. + 正确用法:
  16. ```sql
  17. CREATE TABLE `example` (
  18. ...
  19. ) ...;
  20. ```
  21. **理由**:这是由于运维那边曾经发生过脚本错误或操作失误,会导入历史SQL。在这种情况下,如果有DROP表的语句,就会把正式服玩家数据清除掉,导致需要回档处理。
  22. 其实基于这一原因,通常对数据做更新的操作不应该出现在SQL脚本中,应只保留表结构相关语句。
  23. 但是事实上,有时候不得不更重建表结构或有一些重要的数据修正操作,这类则按实际需要添加。运维那边也加强了验证,尽可能避免此类问题发生。
  24. 2. 用户数据表使用InnoDB引擎和utf-8编码,一般应有主键,非必要尽量不使用联合主键,应有必要的字段注释和表注释
  25. + 示例:
  26. ```sql
  27. CREATE TABLE `guild_war_guild_rank` (
  28. `rank` int(11) NOT NULL COMMENT '排名',
  29. `guild_id` int(11) NOT NULL COMMENT '帮派ID',
  30. `guild_name` varchar(50) NOT NULL COMMENT '帮派名字',
  31. `room` tinyint(3) NOT NULL COMMENT '战区',
  32. `score` int(11) NOT NULL COMMENT '积分',
  33. PRIMARY KEY (`rank`)
  34. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='帮派积分榜';
  35. ```
  36. 3. 注意SQL应是完整可运行的SQL语句,不要遗漏最后的分号或书写不规范的SQL语句
  37. 正式服上会执行这些SQL语句,如果遗漏分号,会导致正式服更新失败
  38. 其他可能影响SQL正常执行的情况同样要避免
  39. 4. 注释应使用标准格式
  40. ```sql
  41. -- 注释风格1 - 推荐风格(注意,行首两个-之后,有一个英文字符的空格)
  42. # 注释风格2
  43. SELECT `id` /* 注释风格3: 我是语句中间的注释 */ FROM `example` LIMIT 1;
  44. ```
  45. 其中,#号开头的注释以及SQL语句中间的注释/* */在项目中一般不使用
  46. 5. SQL文件应以“YY-MM-DD.sql”的形式命名,放在目录名为“YY-MM”的目录下,便于工具自动按序合并SQL脚本。其中,YY表示2位数字年份,MM表示2位数字月份,DD表示2位数字日期。
  47. ```shell
  48. # 正确命名:
  49. 17-06/17-06-07.sql
  50. # 错误命名:
  51. 17-6/17-6-7.sql
  52. ```
  53. 6. 文件统一使用UTF-8编码(不带BOM签名),换行符使用UNIX风格 (即\n换行)。
  54. 不要使用Windows的记事本直接编辑保存SQL脚本,记事本有几点问题:
  55. + 可能编码不对(一般是ANSI码直接保存,在中文系统即采用GBK编码),换行符风格(\r\n)不对
  56. + 即使使用UTF-8编码,保存时仍会自动在文件头加BOM签名,在LINUX环境下,会引起问题
  57. + 如果一行过长,使用快捷键Ctrl+S保存会引起自动断行,可能导致SQL语句有误
  58. 使用其他编辑器的,注意设置工具使用正确的编码和换行符风格。
  59. 7. 文件以开发时提交的命名为准,合并提交到其他分支时不要重新命名,保持原来的文件名及内容在该文档中的对应位置,力求各版本使用相同的文件名、文件内容(更新到同一版本时)。
  60. 使用相同的文件名及文档中位置,便于对版本进行管理,检查和提取版本差异,排查错误操作等。