首页 > 数据库 >MySQL Ruler mysql 日常开发规范

MySQL Ruler mysql 日常开发规范

时间:2024-04-10 15:37:15浏览次数:14  
标签:禁止 索引 Ruler 使用 规范 命名 mysql MySQL

拓展阅读

MySQL View

MySQL truncate table 与 delete 清空表的区别和坑

MySQL Ruler mysql 日常开发规范

MySQL datetime timestamp 以及如何自动更新,如何实现范围查询

MySQL 06 mysql 如何实现类似 oracle 的 merge into

MySQL 05 MySQL入门教程(MySQL tutorial book)

MySQL 04- EMOJI 表情与 UTF8MB4 的故事

MySQL Expression 1 of ORDER BY clause is not in SELECT list,references column

MySQL Ruler

写在前面:

一、为何写

为了自己以后的脚本编写或者是为团队公司提供一个可以达成共识的标准。

二、怎么定规范

简洁明了。根据实际业务可以进行调整。每一个规定尽量描述清楚缘由。规范必须是不断变化的,量体裁衣。

三、参考

《架构师之路》中有提及一些数据库军规。可以提供参考。

四、使用

解读比规则本身更重要。

规范草案

基础规范

适用于所有。(database, table, column)

1、必须有中文解释

可以解释到任何一个程序员(包括黑客)看到注释后立刻理解其中的含义。而不是推敲其中的意思。为了保证这一点,衍生了第二条。

2、尽量使用英文,禁止中英文混用命名。

比如你看到了 zhrmghg 这个字段然后觉得很深奥,后来问命名者告诉你是中华人民共和国的简拼啊,你看不出来啊。。。

3、命名禁止出现大写字母, 禁止出现_以外的字符。

必须保证命名规则转换后可以符合比如驼峰命名。

4、禁止使用数字。使用英文单词替代。

举个例子 email_1, 那么请重命名为email_one。相信你可写出0-99的英文单词。避免,分不清l1, 分不清o0。

5、禁止使用双引号对名称引用, 避免大小写敏感。

如果需要单词间空格, 替换为下划线。

6、所有的命名尽量指出字段的业务含义。

如此之难,以至于想将这一条删除。

数据库规范

1、统一使用 UTF-8 编码

无需转码,无乱码风险。

2、数据库命名与系统名称保持一致。且必须满足基础规范。

比如项目名称blog-service, 对应数据库名称 blog_service

表规范

1、如果是 MySQL, 请使用 InnoDB 引擎

支持事务。其他不吹不黑。

2、必须有主键。

如BIGINT(20)自增的ID, 有利于表的管理。但是这个ID未必是你的唯一约束主键。

3、禁止使用外键。

所有的关联使用应用程序去保证。

4、表名称应统一使用t_开头。

可以与普通的类区分开。当然这一点不强求。(很多公司做不到)

列规范

1、禁止列名使用 col等毫无意义的作为前缀/后缀。

不要把名称浪费在无用的事情上。

2、主键命名统一为id, 当然你也可以使其不包含任何业务含义。

不多说。

3、表中一般会包含2个字段,创建时间和更新时间。请自行统一约定。

date 一般指日期, time 指时间。你可以约定为 created_timeupdated_time。保证所有的 表统一。不要乱改名字。

4、所有的字段都尽量设定为 NOT NULL

这一点根据业务而定。其实 null 不节约任何空间且会导致查询性能优化变得困难。

5、禁止使用 TEXT、BLOB 此类较大的字段

存放他的URL,对应的内容放在文件服务器中。

索引规范

1、单表索引不易过多。(5个以内为佳)

2、组合索引,区分度大的放在前面。

利于数据的快速过滤。

3、索引命名如下:

  • pk 主键 (primary key)

  • uk 唯一键 (unique key)

  • nk 普通索引 (normal key)

以上命名方式为前缀。你会说为什么不写英文全拼啊 ? 不现实,总会有人写错。

SQL 使用规范

1、禁止使用 SELECT *, 必须指定需要查询的字段。

2、禁止使用 INSERT INTO t_xxx VALUES (XXX), 必须明确指定插入的列属性

3、禁止全表扫描

可以看下 索引不工作的case, 实在无法避免可以和前端结合。比如查询必须指定某一区分度很大的字段才能查询。

4、尽量不使用 JOIN

这一点很多人难以接受。处于性能无可厚非的规则。但是如果性能要求没有这么高,资源又有限,可不必遵循。

标签:禁止,索引,Ruler,使用,规范,命名,mysql,MySQL
From: https://www.cnblogs.com/houbbBlogs/p/18126113

相关文章

  • MySQL分组查询以及having筛选
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • prometheus 监控mysql
      启动脚本vim/usr/lib/systemd/system/mysqld_exporter.service[Unit]Description=PrometheusMySQLExporterAfter=network.target[Service]Type=simpleUser=exporterGroup=exporterRestart=alwaysExecStart=/opt/mysqld_exporter-0.15.1/mysqld_exporter\--......
  • Windows环境下删除MySQL
    目录一、关闭MySQL服务1、win+R打开运行,输入services.msc回车2、服务里找到MySQL并停止二、卸载MySQL软件1、打开控制模板--卸载程序--卸载MySQL相关的所有组件三、删除MySQL在物理硬盘上的所有文件1、删除MySQL的安装目录(默认在C盘下的ProgramFiles文件夹)2、删除MySQL数据目录数......
  • 如何优化在docker容器内的MySQL性能
    前言:在现代数据库应用中,性能和可靠性是至关重要的。对于运行在docker中的MySQL容器,通过优化配置可以充分利用宿主机的的性能,从而提升数据库的整体性能和响应速度。下面将介绍如何通过编辑MySQL容器中的配置文件来优化其性能,并详细说明操作步骤。正文:随着云计算和容器化......
  • 基于SpringBoot+MySQL+SSM+Vue.js的宠物商城系统(附论文)
    演示视频基于SpringBoot+MySQL+SSM+Vue.js的宠物商城系统技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot文字描述基于SpringBoot+MySQL+SSM+Vue.js的宠物商城系统(附论文),用......
  • 基于SSM+MySql+Layui的在线教育视频课程管理系统(附论文)
    演示视频基于SSM+MySql+Layui的在线教育视频课程管理系统(附论文)-源码乐园技术描述开发工具:Idea/Eclipse数据库:mysqlJar包仓库:Maven前段框架:LayUI后端框架:Spring+SpringMVC+Mybatis+MySQL文字描述基于SSM+MySql+Layui的在线教育视频课程管理系统,分为用......
  • 基于SSM+SpringBoot+MySQL+Element+Vue的鲜花销售商城系统(附论文)
    演示视频基于SSM+SpringBoot+MySQL+Element+Vue的鲜花销售商城系统(附论文)-源码乐园技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Element/Vue后端框架:Spring+SpringMVC+Mybatis+Element+Vue文字描述基于SSM+SpringBoot+MySQL+Element......
  • MySQL-6.表的高级查询(多表查询、子查询、表复制、合并查询、表外连接)
    6.1 多表查询基于两个或以上表的查询,默认从表1取出一行,与表2的每一行组合,返回的记录数为表1×表2,默认返回的结果为笛卡尔集,需写出正确的WHERE条件进行筛选。多表查询的条件不能少于表的个数-1,否则会出现笛卡尔集。指定显示某个表的列:表.列#显示雇员名,雇员工资及所在......
  • mysql开启ip访问
    步骤1登录mysql 首先,我们需要登录MySQL数据库。可以使用MySQL的命令行工具或者图形界面工具,使用root用户登录。 mysql-uroot-p 2创建用户 我们可以创建一个新用户,并为该用户分配权限。假设我们要给IP地址为192.168.1.100的用户分配权限  CREATEUSER'newuser......
  • Mysql时间差8小时解决方案
    在开发中,有可能会遇到这种情况: 插入数据库中的时间时正常。但是将时间传到前端页面上显示时,会早8个小时。这个问题我们可以从两方面来分析: MySQL本身的问题。JDBC连接的问题。MySQL本身的问题1-1.验证MySQL时间首先,我们执行如下SQL看看MySQL上的时间跟我的......