当前位置: 首页 > news >正文

mysql数据表设计

命名

mysql表名的命名规范为表名可以用 t_ 、tb_的前缀,或者是业务模块前缀。比如t_order。
有些项目也会使用 tt_、tm_、 ts_ 等前缀,根据项目的习惯命名就好了。

主键:

  • AUTO_INCREMENT 表示自增,UNSIGNED 表示无符号,UNIQUE 表示唯一约束,COMMENT为字段描述。DEFAULT表示默认值。NOT NULL表示不能为NULL。
  • 主键一般情况下用自增id,自增id是有序的,性能会比较好。
  • 分库分表的主键id,可以用雪花算法,自增id容易有冲突。

索引

  • mysql 索引用idx_开头,唯一索引用uk_开头。
  • 如果有多个索引,可以用复合索引的情况,考虑用复合索引。如果查询条件不满足"最左匹配原则",考虑用单独索引。

整型

  • 数字类型的状态数值,建议不要从0开始,0会被某些ORM框架(比如mybatis) 识别成空。
  • 状态用数值类型表示时,如果业务变化比较快/复杂,建议用10,20,30之类的数字,如果后续新增中间的状态,可以用 11,12表示,方便拓展。
  • INT数据类型所表示的数值范围从 -2^31 到 2^31-1,可以用int数据类型来表达-2,147,483,648到2,147,483,647(即大约正负二十亿)之间的整数。
  • 数字类型(INT、BIGINT、TINYINT)后面括号内的字段长度是用来表示该类型最多显示多少位的,类似于注释,并不起任何作用。
  • INT(10)和INT(4)没什么区别,直接写 INT 也可以。
  • BIGINT:超过INT的范围,需要用BIGINT。
  • 存储精确浮点数,必须使用DECIMAL替代FLOAT和DOUBLE。
  • TINYINT: TINYINT 无符号的范围是0-255之间的数字。布尔类型,或者一些简单的数值。

字符串

  • VARCHAR要检查字段长度,写入时是否限制长度,太长会浪费存储空间,太短插入时会报错。

  • VARCHAR的长度最好比实际要求的稍长一些,留一些扩展性。

  • VARCHAR的DEFAULT默认值,最好设置成’',也就是 DEFAULT ‘’,而不是NULL。NULL对统计、求和都会有影响。

TEXT类型

  • 不建议使用 TEXT 大字段类型,性能比较差。

  • TEXT类型,不可以有默认值。否则会报错 BLOB, TEXT, GEOMETRY or JSON column can’t have a default value

逻辑删除

  • 删除数据,最好加一个 deleted 的字段,为1时表示已失效,不要直接把数据删除,出现问题,方便溯源。

如果用 is_delete, 数据映射成对象后, is开头的属性,进行rpc调用时,可能会有序列化的问题。

字符

  • DEFAULT CHARSET=utf8mb4, utf8mb4 比 utf8 支持更广泛的字符范围。

日期时间

  • 日期类型,使用 DATE.

  • 日期时间类型,用 DATETIME 或者TIMESTAMP ,如果不需要支持多个时区,一般用 DATETIME. 因为TIMESTAMP 的最大值是2038年。

  • DATETIME 和 TIMESTAMP 区别如下:

datetime只支持一个时区,就是存储时当前服务器的时区,而timestamp存储的是与时区有关;
datetime存储占用8个字节,而timestamp是占用4字节;
timestamp插入NULL时会自动转换成当前时间.datetime插入NULL就是NULL.
  • 涉及新增或变更操作记录的,必须有 create_time字段和update_time字段 ,方便定位问题。

  • DEFAULT CURRENT_TIMESTAMP表示默认当前时间,ON UPDATE CURRENT_TIMESTAMP 表示更新时默认当前时间。

示例:

CREATE TABLE tt_order
(id          BIGINT(20)        NOT NULL AUTO_INCREMENT COMMENT '主键,自增id',order_id    VARCHAR(32) NOT NULL UNIQUE COMMENT '订单号,唯一',pay_status  INT UNSIGNED DEFAULT 0 COMMENT '10:未支付,20:支付成功,30:支付失败, 40:已下单,50:申请退款,60:退款成功,70:退款失败 ',user_id     BIGINT(20)  NOT NULL COMMENT '用户id',total_price DECIMAL(32, 2)   DEFAULT 0.00 COMMENT '交易金额',order_desc  VARCHAR(128)     DEFAULT '' COMMENT '订单描述',order_date  DATE             DEFAULT NULL COMMENT '订单日期',create_time DATETIME         DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间,默认当前时间',update_time DATETIME         DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间,更新时默认当前时间',deleted   TINYINT(1)       DEFAULT 0 COMMENT '是否删除,0表示否,1表示是',PRIMARY KEY (id),INDEX idx_order (order_id)
) ENGINE = INNODBDEFAULT CHARSET = utf8mb4AUTO_INCREMENT = 1 COMMENT ='示例表';

参考资料:

https://www.cnblogs.com/mxwz/p/7520309.html

相关文章:

mysql数据表设计

命名 mysql表名的命名规范为表名可以用 t_ 、tb_的前缀,或者是业务模块前缀。比如t_order。 有些项目也会使用 tt_、tm_、 ts_ 等前缀,根据项目的习惯命名就好了。 主键: AUTO_INCREMENT 表示自增,UNSIGNED 表示无符号&#xf…...

pytorch复现4_Resnet

ResNet在《Deep Residual Learning for Image Recognition》论文中提出,是在CVPR 2016发表的一种影响深远的网络模型,由何凯明大神团队提出来,在ImageNet的分类比赛上将网络深度直接提高到了152层,前一年夺冠的VGG只有19层。Image…...

【数据库】形式化关系查询语言(一):关系代数Relational Algebra:基本运算、附加关系代数、扩展的关系代数

目录 一、关系代数Relational Algebra 1. 基本运算 a. 选择运算(Select Operation) b. 投影运算(Project Operation) 组合 c. 并运算(Union Operation) d. 集合差运算(Set Difference Op…...

【计算机网络】计算机网络和因特网

一.基本术语介绍 端系统通过通信链路(communication link)和分组交换机(packet switch)连接到一起,连接这些端系统和分组交换机的物理媒体包括:同轴电缆,铜线,光纤和无线电频谱。而…...

JAVA面经整理(9)

一)什么是Spring?它有什么优点? spring是一款顶级的开源框架,他是包含了众多工具方法的IOC容器,Spring中包含了很多模块,比如说Spring-core,Spring-context,Spring-aop,Spring-web,…...

IPD(集成产品开发)模式下的产品研发流程

IPD(集成产品开发)涵盖了产品从创意提出到研发、生产、运营等,包含了产品开发到营销运营的整个过程。围绕产品(或项目)生命周期的过程的管理模式,是一套生产流程,更是时下国际先进的管理体系。I…...

Flutter GetX的使用

比较强大的状态管理框架 引入库: dependencies:get: ^4.6.6一.实现一个简单的demo 实现一个计数器功能 代码如下: import package:flutter/material.dart; import package:get/get.dart;void main() > runApp(const GetMaterialApp(home: Home()…...

【Amazon】AWS实战 | 快速发布安全传输的静态页面

文章目录 一、实验架构图二、实验涉及的AWS服务三、实验操作步骤1. 创建S3存储桶,存放网站网页2. 使用ACM建立域名证书3. 设置Cloudfront,连接S3存储桶✴️4. 设置Route53,解析域名服务5. 通过CLI工具上传网页更新内容【可选】 四、实验总结 …...

前后端登录的密码加密和解密

在一个典型的前后端应用中,前端对密码进行加密后传给后端,后端再进行解密或验证。这通常涉及前端加密、后端解密或验证的相互配合。下面是一个基本的流程: 前端加密: 前端可以使用各种加密库或算法对密码进行加密。常见的是使用哈…...

使用 Curl 和 DomCrawler 下载抖音视频链接并存储到指定文件夹

项目需求 假设我们需要从抖音平台上下载一些特定的视频,以便进行分析、编辑或其他用途。为了实现这个目标,我们需要编写一个爬虫程序来获取抖音视频的链接,并将其保存到本地文件夹中。 目标分析 在开始编写爬虫之前,我们需要了…...

取消Excel打开密码的两种方法

Excel设置了打开密码,想要取消打开密码是由两种方法的,今天分享这两种方法给大家。 想要取消密码是需要直到正确密码的,因为只有打开文件才能进行取消密码的操作 方法一: 是大家常见的取消方法,打开excel文件之后&a…...

多测师肖sir_高级金牌讲师_jmeter 反向代理录制脚本

jemeter自带的录制脚本功能,是利用代理服务器来进行录制的 1,新建一个线程组 2,新建一个代理服务器 右击工作台-添加-非测试元件-http代理服务器 3, 配置http代理服务器 端口: 默认为8888,可修改。但…...

网络取证-Tomcat-简单

题干: 我们的 SOC 团队在公司内部网的一台 Web 服务器上检测到可疑活动。为了更深入地了解情况,团队捕获了网络流量进行分析。此 pcap 文件可能包含一系列恶意活动,这些活动已导致 Apache Tomcat Web 服务器遭到破坏。我们需要进一步调查这一…...

3.Linux常用操作(传输、crontab定时、匹配日期删除文件等)

1. 服务器之间传输文件 1.1 传输文件到本服务器 scp -P 19622 -C dockeruser192.168.100.96:/home/dockeruser/lgr/lgr.dmp /home/dockeruser/lgr描述: 用dockeruser账号登录端口号为19622的192.168.100.96服务器,将此服务器的/home/dockeruser/lgr/l…...

ChatGPT对未来发展的影响?一般什么时候用到GPT

ChatGPT以其强大的自然语言处理能力对未来的发展具有重要影响。以下是ChatGPT的潜在影响和一般使用情况: 改善自然语言理解和生成:ChatGPT和类似的模型可以改善机器对人类语言的理解和生成。这将有助于改进各种应用领域,包括智能助手、聊天机…...

在Win10系统进行MySQL的安装、连接、卸载

在Win10系统进行MySQL的安装、连接、卸载 MySQL的安装 本教程在Win10系统下安装部署MySQL-8.0.32版。 MySQL安装参考地址 MySQL安装包地址 提取码: rnbc。 选择下载mysql-installer-community-8.0.32.0安装包。 连接数据库 方式一: 安装后,可以在开始…...

Windows下pm2调用npm和nuxt的办法

pm2调用npm pm2 start C:\Users\xiao\AppData\Roaming\npm\node_modules\npm\index.js --name test -- run start 其中index.js的路径就是npm全局安装的路径,可通过以下命令获取 npm root -g require全局npm模块的一种方法 新建文件pm2npm.js const root req…...

本地仓库转为git仓库推送到gitee

通常有两种获取 Git 项目仓库的方式: 方式一:将尚未进行版本控制的本地目录转换为 Git 仓库; 方式二:从其它服务器 克隆 一个已存在的 Git 仓库。 两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。 方式一&#xff1a…...

CSS以及JavaScript

目录 一.CSS 1.overflow溢出属性 2.定位 二.JavaScript基础 1.JavaScript引入方式 2.JavaScript数据类型 常用方法: 字符串常用方法: 在js里,什么是真,什么是假 数组的常用方法 运算符 (1)算数运…...

JVM——类的生命周期(加载阶段,连接阶段,初始化阶段)

目录 1.加载阶段2.连接阶段1.验证2.准备3.解析 3.初始化阶段4.总结 类的生命周期 1.加载阶段 ⚫ 1、加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道。 ⚫ 2、类加载器在加载完类…...

CSS中实现元素居中的几种方法总结

一、使用 text-align: center 居中 使用 text-align: center; 可以在CSS中实现内联元素的水平居中。这个技术利用了CSS的 text-align 属性&#xff0c;通过对元素的文本对齐方式进行调整来实现居中效果。注&#xff1a;只展示主要代码。 <div class"container"&…...

保护听力戴什么耳机比较好?开放式耳机能保护听力吗?

如果想要在保护听力的前提下戴耳机&#xff0c;那么我是推荐戴骨传导耳机的&#xff01;&#xff01;&#xff01; 所谓骨传导即是一种声音传递的方式&#xff0c;跟普通耳机不同的是传统耳机是通过空气将声音通过耳膜以此完成传递&#xff0c;而骨传导耳机的原理是将声音以不同…...

【JVM】垃圾回收机制

【JVM】垃圾回收机制 文章目录 【JVM】垃圾回收机制1. 方法区的回收2. 堆的回收2.1 引用计数法2.2 可达性分析算法 3. 对象引用3.1 强引用3.2 软引用3.3 弱引用3.4 虚引用和终结器引用 4. 垃圾回收算法4.1 标记清除算法4.2 复制算法4.3 标记整理算法4.4 分代垃圾回收算法 5. 垃…...

MySQL数据库入门到精通——运维篇(2)

MySQL数据库入门到精通——运维篇&#xff08;2&#xff09; 1. 分库分表1.1 分库分表介绍1.1.1 现在的问题1.1.2 拆分策略1.1.2.1 垂直拆分策略1.1.2.2 水平拆分策略 1.2 Mycat概述1.3 Mycat入门1.4 Mycat配置1.4.1 Schema标签1.4.2 Datanode标签1.4.3 Datahost标签1.4.4 rule…...

投资者如何保障个人利益?行业律师与欧科云链专家给出建议

香港作为全球加速拥抱Web3变革的引领之地&#xff0c;规定自今年6月起在香港经营虚拟资产服务业务需申领牌照。蜂拥而至的Web3创业公司&#xff0c;伺机而动的加密货币交易所&#xff0c;以及跃跃欲试的行业从业者&#xff0c;都让这座金融之都热闹非凡。但近期伴随JPEX诈骗案等…...

【办公软件】C#调用NPOI实现Excel文件的加载、导出功能

文章目录 1. 引言2. 环境准备3. 示例代码4. 结果5. 总结 1. 引言 本文将介绍如何使用C#和NPOI库实现Excel文件的读写操作&#xff0c;并通过加载文件和导出文件的按钮进行封装。NPOI是一个强大的.NET库&#xff0c;可以轻松处理Excel文件。我们将学习如何使用NPOI打开现有的Ex…...

UVA 11990 “Dynamic‘‘ Inversion 区域树 + 树状数组

一、题目大意 我们有 1 2 3 ... n 这些数字组成的一个排列数组 a &#xff0c;需要从这个排列中取出m个数字&#xff0c;要求计算出出每次取出数字之前&#xff0c;数组中的逆序数&#xff08;逆序数就是 i < j&#xff0c;但是 ai > aj的数&#xff09; 二、解题思路 …...

邮件钓鱼分析

三大协议 SPF Sender Policy Framework 的缩写&#xff0c;一种以IP地址认证电子邮件发件人身份的技术。 注&#xff1a;收信人怀疑币是假的&#xff0c;查看这个送信包裹里面记录的发出地是不是央行&#xff0c;如果是黑市有可能是黑钱 DKIM 加密签名和域名关联。 注&am…...

Android 小技巧

1. Android Studio下载地址 Android 开发者 | Android Developers (google.cn) 2.Android Aosp 在线查看地址&#xff1a; AOSPXRef 3.Android 官方文档地址&#xff1a; Android 开源项目 | Android Open Source Project (google.cn)...

Centos MySQL --skip-grant-tables详解

跳过权限验证&#xff0c;导出数据备份 主机系统&#xff1a;Centos7 64位 数据库版本&#xff1a;MySQL5.7.40 使用–skip-grant-tables场景 1、忘记管理员密码 2、修改管理员密码 mysql -uroot -p显示错误内容如下&#xff1a; ERROR 1045 (28000): Access denied for …...