目录

(1)数据类型;

(2)表名称与字段名称设计规则;

(3)字符集;

(4)字符串函数—3.1-3.5 ;

(5)字母大小写转换函数 ;

(6)数学函数 ;

(7)日期操作函数 ;

(8)类型转换函数;

(9)类型转换函数;

(10) 特殊函数 ;

(11)聚合函数 ;

(12)简化查询语句;

(13)SELECT子句的使用规范;

(14)WHERE条件子句

hello大家我是称号比龙母还多的Amy(什么数据库全境守护者、程序他妈、雌性码农、不休息者、分布式事务数据库的女王……)。

入驻知乎已经很久了,之前每天潜水看各种大佬做知识分享实在是受益匪浅。

本着“白嫖可耻、分享光荣、我为人人、人人为我”的精神,Amy决定也发挥一下雷锋精神向各位大佬学习,把自己在实践中学到的一些技能搬上来,希望能够给大家带来一点帮助,如果你觉得这篇文章有用的话,后面我还会持续分享更多干货,记得经常来看看哦。


(1)数据类型

1.1 数据类型分类

a) 数值类型 — TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、 DECIMAL

b) 时间类型 — DATE、DATETIME、TIMESTAMP

c) 字符串类型 — CHAR、VARCHAR、TEXT

d) 特有类型 — ENUM、SET

1.2 特别说明

VARCHAR(N) 或 CHAR(N)中 N 的含义

MySQL 中两类字符串 VARCHAR(N) 或 CHAR(N)定义时候填写的长度 N,不是字节数的意思 ,而是字符数的含义。

浮点数

同财务有关的浮点数必须使用精确存储的 DECIMAL 数值类型。为减少浮点类型 FLOAT 和DOUBLE 的精度不够而可能造成数值计算存在偏差,故非财务相关的浮点数字段也采用DECIMAL 数值类型存储,禁止使用 FLOAL 和 DOUBLE 类型。例如:weight DECIMAL(10,4) NOT NULL DEFAULT 0。

1.3 数据类型范围

1.4 详细说明

类似于状态,且有限类别的字段,推荐使用可比较明显表示出实际意义的字符串,而不应该使用 INT 之类的数字来代替,故推荐使用枚举类型 ENUM 和集合类型 SET;

使用 UTF8 时,因其是变长的字符集,故固定和动态长度的字符串都应用 VARCHAR;

仅仅当字符数量可能超过 20000 个的时候,可以使用 TEXT/MEDIUMTEXT 类型来存放字符类数据。推荐所有使用 TEXT/MEDIUMTEXT 类型的字段和原表进行分拆,与原表主键单独组成另外一个表进行存放;

需要精确时间(年月日时分秒)的字段可以使用 DATETIME 或 TIMESTAMP,但请注意各自能表达的范围,以及是否需要用到 TIMESTAMP 的特性,尽量使用 TIMESTAMP类型替代 DATETIME 以减少数据存储空间的占用;需要毫秒、微妙时,使用TIMESTAMP (3)或 TIMESTAMP (6),以及 DATETIME(3)和 DATETIME(6)(注:社区版 5.6 开始 DATATIME 也支持 CURRENT_TIMESTAMP.,且支持任意数量与组合);

所有只需要精确到天的字段全部使用 DATE 类型,而不应该使用 TIMESTAMP 或DATETIME 类型;

自增序列特性的字段只能使用 INT 或者 BIGINT,强烈推荐明确标识为无符号类型(关键词:UNSIGNED),除非确实会出现负数,仅当该字段的数值会超过 42 亿,才使用 BIGINT 类型,并且自增字段必须作为主键或主键的一部分;

INT(N)中 N 的含义

MySQL 中各类整形也可包含长度,该长度的含义和 Oracle 的 NUMBER 类型的长度含义不同,N 值的大小完全不影响数值的存储范围,只影响有 ZEROFILL 时显示的长度。

空字符串的含义

MySQL 中字符串存在三种容易混淆的值:空字符串’’、空值 NULL 和 NULL 字符串’NULL’,需要注意判断。和 Oracle 的最大区别为 Oracle 不区分空字符串’’和空值 NULL。

1.1.5 分片字段数据类型选择

禁止选择大字段类型,以及非精确浮点型,空间类型的字段作为分片字段的数据类型。

禁止作为分片字段的类型见下列表格:

避免分片字段使用二进制类型 binary 和 varbinay。

避免分片字段使用二进制校对规则。可在 MySQL 数据库执行 SQL 语句,查找二进制的校对规则:select * from information_schema.collations where collation_name like ‘%bin’;

(2)表名称与字段名称设计规则

表名称 xxdb_heartbeat 为 某分布式事务数据库的心跳表,在业务系统中,请不要使用该表名称。

字段名称 dnid 为 某分布式事务数据库 的一个 QUERY 功能点,因此,在业务系统表结构设计时,请不要在任何表中使用 dnid 字段名称。

(3) 字符集

字符集 UTF-8 编码基本上表达我们日常所使用到的汉字、字母或字符,也能够兼容更多语种;其次,项目所用编程语言为 JAVA,而 JAVA 开发工具的语言也是默认为 UTF-8。

若项目中的业务数据不需要区分字母的大小写,我们的建议:字符集统一为 utf8,字符集校对规则为 utf8_general_ci;若研目中的业务数据需要区分字母的大小写,则字符集校对规则为:utf8_bin。

若项目中的业务数据存在特殊字符(emoji 表情),则字符集统一为 utf8mb4,若不区分大小写,字符集校对规则为 utf8mb4_general_ci,若需要区分大小写,字符集校对规则为utf8mb4_bin。

采用 utf8 编码时,对于中文汉字及符号,实际存储时占三个字节,而数值、字母和符号(注:英文输入法下),则只占一个字节。例如:

CREATE TABEL gl_user(username VARCHAR(40));则 username 最多能存储 40 个字符;

username 存储’U-Cloud’ 则占用存储空间为:7 个字节(注释:变长会额外增加 1 个字节或 2 个字节,此处实际占用存储空间为:8 个字节);

采用 utf8mb4 编码时,对于 emoji 特殊符号,实际存储时占四个字节,而中文字符占三个字节,数值、字母和符号(注:英文输入法下),则只占一个字节。

特别说明

随着移动互联网业务发展,越来越多的移动终端支持输入一些特殊符号,字符编码空间超过 3 个字节,则可使用 4 个字节编码的 utf8mb4。不区分字母大小的示例,如下:

CREATE TABEL gl_user(username VARCHAR(40) CHARACTER SET utf8mb4

COLLATE utf8mb4_general_ci);则 username 最多能存储 40 个字符,字符自身占用最大存储空间 160 个字节。

---------------------

今天就先更新到这里啦。后面的内容会持续放上来的,如果感兴趣的话可以继续关注我哦~有什么问题也欢迎大家在评论里指出~下期见!

mysql datetime 比较大小_【知识点】分布式事务数据库 —-MySQL 数据库开发规范(第一节)...相关推荐

  1. JAVA分布式医疗云平台系统开发实战第一节 open-his系统技术架构与环境准备

    项目简介                                                                       Open-His 是以完整的基层医疗机构-信息化解 ...

  2. JAVA分布式医疗云平台系统开发实战第一节 open-his系统介绍

    Open-his 支付系统                                                                       1.目的             ...

  3. spring boot+Mybatis+mysql+atomikos+jta实现多数据源分布式事务

    spring boot+Mybatis+mysql+atomikos+jta实现多数据源分布式事务 1.导入相关依赖 2.配置相关application.properties 3.创建配置文件 4.创 ...

  4. MySQL中基于XA实现的分布式事务

    文章目录 一.前言 二.XA基础 2.1 XA基础知识 2.1.1 DTP是什么? 2.1.2 DTP的结构:AP TM RM(重点001) 2.1.3 DTP的重要概念 2.2 XA事务:基于两阶段 ...

  5. MySQL 中基于 XA 实现的分布式事务

    五.MySQL 中基于 XA 实现的分布式事务 5.1 XA协议 首先我们来简要看下分布式事务处理的XA规范 可知XA规范中分布式事务有AP,RM,TM组成: 其中应用程序(Application P ...

  6. mysql超长sql查询_超长SQL怎么查询?MySQL列长度限制有哪些 | 学步园

    MySQL字符串的限制长度看似重要性不要,其实和整个MySQL数据库的安全性是息息相关的,很值得我们去深入研究分析.SQL注入攻击一直都在被广泛的讨论,然而人们却忽略了今天我将要介绍的这两个安全隐患, ...

  7. 分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器

    百度智能云 云生态狂欢季 热门云产品1折起>>>   云原生计算基金会 CNCF 昨日宣布接纳 TiKV 开源分布式事务键值数据库作为 CNCF 沙箱的早期发展云原生项目. TiKV ...

  8. mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务

    概述 前面已经介绍了2PC和3PC方面的内容,那么MySQL数据库在分布式事务这块又是怎么规划呢? XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准 ...

  9. 分布式事务框架_阿里分布式事务框架GTS开源啦!

    点击上方"Java后端技术",选择"置顶或者星标" 每天带你看高清大图哦! 整理:开源中国 就在9号这天,阿里分布式事务框架GTS开源了一个免费社区版Fesca ...

最新文章

  1. LwIP Application Developers Manual12---Configuring lwIP
  2. Nginx从基本原理到开发实践
  3. Linux 应用程序 嵌汇编,Linux下嵌入汇编代码调用API(using fork())
  4. HDU 1232 - 畅通工程
  5. mysql 随机选取一条记录
  6. 细数黑客攻击的七大战术
  7. 实战生产环境vCenter HA配置(VCSA6.5)
  8. python程序设计采用格式框架结构_Python笔记:基于Django框架的项目架构程序设计...
  9. NUC1397 Oil Deposits【DFS】
  10. Centos7安装完毕后无法联网的解决方法(转)
  11. Linux多线程同步之相互排斥量和条件变量
  12. 【电力负荷预测】基于matlab量子粒子群算法优化LSTM短期电力负荷预测【含Matlab源码 1560期】
  13. JetBrains PyCharm免费版
  14. Oracle 存储过程中打印SQL影响的行数
  15. linux 下安装rar解压软件,centos下rar解压工具的安装 rar和unrar命令使用方法
  16. 高潮再次来袭:马云,东哥两位电商大佬,强行助攻 996
  17. win10monkey安装教程_详解win10下pytorch-gpu安装以及CUDA详细安装过程
  18. 35.给定的字符串中字母顺序前移,其他字符顺序后移。
  19. 你还在担心期末复习没有题目做?爬虫帮帮你
  20. Hadoop Shell 常用命令

热门文章

  1. 郭卓惺:互动课堂的搭建实例及相关领域应用
  2. Python对DICOM图像进行阈值分割
  3. Spring--quartz中cronExpression配置说明
  4. linq to xml查询绑定GridView
  5. hdu 1176:免费馅饼
  6. Python稳基修炼之计算机等级考试易错概念题3(含答案与解析)
  7. usb连接不上 艾德克斯电源_硬核充电宝?360汽车应急电源入手体验
  8. 枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。
  9. Python实现定时自动关闭的tkinter窗口
  10. python 实现对地图的点击_python使用folium库绘制地图点击框