优化 invite_codes 表的 SQL 创建语句

-- auto-generated definition
create table invite_codes
(id int auto_incrementprimary key,invite_code varchar(6) not null comment '邀请码,6位整数,确保在有效期内唯一',invitor int null comment '邀请人的ID,对应admin表中的id字段,表示生成该邀请码的管理员或用户',invite_level tinyint null comment '邀请层级,对应admin表中level字段的值,表示邀请人的层级',generated_date datetime default CURRENT_TIMESTAMP not null comment '生成时间,默认为当前时间',expire_time datetime null comment '失效时间,可为空',remark text null comment '备注信息,可为空',status enum ('effective', 'expired', 'bound') default 'effective' not null comment '邀请码状态,默认为 "effective"',bound_phone varchar(20) null comment '绑定的手机号,对应admin表中的phone字段,表示与邀请码关联的管理员或用户的手机号',weixin_nickname varchar(255) null comment '微信用户的昵称,对应user表中的nickname字段,表示与邀请码关联的用户的微信昵称',weixin_headimg varchar(255) null comment '微信用户的头像URL,对应user表中的avatar字段,表示与邀请码关联的用户的微信头像URL',bound_wx_uid varchar(255) null comment '微信用户的唯一标识符,对应user表中的weChatUnionId字段,表示与邀请码关联的用户的微信唯一标识符',admin_id int null comment '管理员ID,关联admin表,可为空',user_id int null comment '用户ID,关联user表,表示与邀请码关联的用户',is_locked tinyint(1) default 0 not null comment '是否锁定,0表示未锁定,1表示已锁定,默认为0',created_date timestamp default CURRENT_TIMESTAMP not null comment '记录创建的时间戳,默认为当前时间',last_modified_date timestamp null on update CURRENT_TIMESTAMP comment '记录最后更新的时间戳,默认为NULL,更新时自动设置为当前时间',constraint codeunique (invite_code),constraint invite_codes_ibfk_1foreign key (admin_id) references productqualification.admin (id),constraint invite_codes_ibfk_2foreign key (invitor) references productqualification.admin (id),constraint invite_codes_ibfk_3foreign key (user_id) references productqualification.user (id)
)collate = utf8mb4_unicode_ci;create index admin_idon invite_codes (admin_id);create index invitoron invite_codes (invitor);create index user_idon invite_codes (user_id);
好的,我来根据你提供的图片和 SQL 创建语句,详细解释一下 SQL 审核的优化建议,并给出相应的修改方案。
图片内容解读:
图片中展示的是一份 SQL 审核的优化建议,主要分为两个部分:
- 建议改进 (绿色标识):
- 字段建议增加备注说明:id
invite_codes表建议增加备注说明
- 潜在问题 (黄色标识):
invite_codes表不建议使用外键status字段的类型enum不建议使用,建议用tinyint/char代替id是自增字段,建议增加无符号属性 (unsigned)invite_codes表的校验集建议为:utf8_general_ci | utf8_bin | utf8mb4_general_ci | utf8mb4_bin
针对性优化方案:
根据以上建议和提供的 CREATE TABLE 语句,我给出优化后的 SQL:
CREATE TABLE `invite_codes` (`id` INT UNSIGNED AUTO_INCREMENT COMMENT '主键ID,自增长',`invite_code` VARCHAR(6) NOT NULL COMMENT '邀请码,6位整数,确保在有效期内唯一',`invitor` INT NULL COMMENT '邀请人的ID,对应admin表中的id字段,表示生成该邀请码的管理员或用户',`invite_level` TINYINT NULL COMMENT '邀请层级,对应admin表中level字段的值,表示邀请人的层级',`generated_date` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '生成时间,默认为当前时间',`expire_time` DATETIME NULL COMMENT '失效时间,可为空',`remark` TEXT NULL COMMENT '备注信息,可为空',`status` TINYINT NOT NULL DEFAULT 0 COMMENT '邀请码状态,0表示有效,1表示已过期,2表示已绑定',`bound_phone` VARCHAR(20) NULL COMMENT '绑定的手机号,对应admin表中的phone字段,表示与邀请码关联的管理员或用户的手机号',`weixin_nickname` VARCHAR(255) NULL COMMENT '微信用户的昵称,对应user表中的nickname字段,表示与邀请码关联的用户的微信昵称',`weixin_headimg` VARCHAR(255) NULL COMMENT '微信用户的头像URL,对应user表中的avatar字段,表示与邀请码关联的用户的微信头像URL',`bound_wx_uid` VARCHAR(255) NULL COMMENT '微信用户的唯一标识符,对应user表中的weChatUnionId字段,表示与邀请码关联的用户的微信唯一标识符',`admin_id` INT NULL COMMENT '管理员ID,关联admin表,可为空',`user_id` INT NULL COMMENT '用户ID,关联user表,表示与邀请码关联的用户',`is_locked` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否锁定,0表示未锁定,1表示已锁定,默认为0',`created_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建的时间戳,默认为当前时间',`last_modified_date` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '记录最后更新的时间戳,默认为NULL,更新时自动设置为当前时间',PRIMARY KEY (`id`),UNIQUE KEY `code` (`invite_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请码表';CREATE INDEX `admin_id` ON `invite_codes` (`admin_id`);
CREATE INDEX `invitor` ON `invite_codes` (`invitor`);
CREATE INDEX `user_id` ON `invite_codes` (`user_id`);
详细修改说明:
id字段添加备注:- 在
id字段的定义中添加COMMENT '主键ID,自增长',以解释该字段的作用。
- 在
invite_codes表添加备注:- 在
CREATE TABLE语句的末尾添加COMMENT='邀请码表',说明此表的作用。
- 在
id字段添加UNSIGNED属性:- 将
INT修改为INT UNSIGNED,表示id列的值为非负整数。 这可以增加id列的最大值,因为无符号整数比有符号整数的范围更大。
- 将
- 移除外键约束(
invite_codes_ibfk_1,invite_codes_ibfk_2,invite_codes_ibfk_3):- 根据建议,取消外键约束。 虽然外键可以保证数据一致性, 但是如果数据量过大, 外键约束会降低性能。 如果你的应用本身可以保证数据一致性,可以去掉外键约束。
- 如果你的应用确实需要外键约束,并且性能不会是瓶颈,那么可以保留外键约束。
status字段类型修改为TINYINT:- 将
status字段的类型从enum ('effective', 'expired', 'bound')修改为TINYINT NOT NULL DEFAULT 0, 并添加注释COMMENT '邀请码状态,0表示有效,1表示已过期,2表示已绑定'。 enum类型在数据库中存储的是字符串,而tinyint存储的是整数。 使用tinyint存储状态,性能更高。- 使用
tinyint类型时,需要在注释中明确每个数字的含义。
- 将
- 设置表的字符集和排序规则:
- 在
CREATE TABLE语句中使用DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。 utf8mb4字符集支持更广泛的 Unicode 字符,可以避免乱码问题。utf8mb4_unicode_ci是一种不区分大小写的排序规则, 在比较字符串时忽略大小写。- 这里选择
utf8mb4_unicode_ci排序规则,因为该表中有昵称等数据, 选择此排序规则, 比较字符串时可以忽略大小写。 - 如果你需要更精细的排序, 可以选择
utf8mb4_bin。 - 你也可以使用
utf8_general_ci或utf8_bin, 但考虑到utf8mb4对 Unicode 的支持更好, 推荐使用utf8mb4的字符集和排序规则。
- 在
- 添加索引:
- 保留原有的
admin_id,invitor,user_id的索引。
其他说明:
- 注释 (COMMENT): 在代码中添加合适的注释很重要,可以提高代码的可读性,方便后期维护。
- 外键约束: 外键约束通常用于保证数据完整性,但是会降低性能, 你需要根据实际情况选择是否使用。
- 数据类型选择: 选择合适的数据类型可以有效地利用存储空间, 并提高查询效率。
COLLATE和CHARSET: 正确设置字符集和排序规则可以避免乱码问题,并且影响查询时的排序和比较规则。
总结:
优化后的 SQL 语句,根据了图片上的建议,添加了注释, 修改了 id 列的属性, 移除了外键约束,修改了 status 列的类型, 并设置了表的字符集和排序规则。 从而使 SQL 语句更清晰,结构更合理,也更能提高性能。
相关文章:
优化 invite_codes 表的 SQL 创建语句
-- auto-generated definition create table invite_codes (id int auto_incrementprimary key,invite_code varchar(6) not null comment 邀请码,6位整数,确保在有效期内…...
springboot容器无法获取@Autowired对象,报null对象空指针问题的解决方式
示例错误代码: package com.uniin.ib.provider.iot.handle;Slf4j Component public class FireStringInboundHandler extends ChannelInboundHandlerAdapter {Autowiredprivate RsFireMonitoringMapper rsFireMonitoringMapper;Autowiredprivate RsFireAlertMapper…...
服务器数据恢复—Lustre分布式文件系统下服务器节点进水的数据恢复案例
服务器数据恢复环境&故障: 5台节点服务器,每台节点服务器上有一组RAID5阵列。每组RAID5阵列上有6块硬盘(其中1块硬盘设置为热备盘,其他5块硬盘为数据盘)。上层系统环境为Lustre分布式文件系统。 机房天花板漏水导致…...
由于这些关键原因,我总是手边有一台虚拟机
概括 虚拟机提供了一个安全的环境来测试有风险的设置或软件,而不会影响您的主系统。设置和保存虚拟机非常简单,无需更改主要设备即可方便地访问多个操作系统。运行虚拟机可能会占用大量资源,但现代 PC 可以很好地处理它,为实验和工作流程优化提供无限的可能性。如果您喜欢使…...
word无法创建工作文件,检查临时环境变量。
word无法创建工作文件,检查临时环境变量。 word preview版本,关联打开文件出现报错。word无法创建工作文件,检查临时环境变量。 打开注册表,删除键 Word Preview: HKCR\CLSID{84F66100-FF7C-4fb4-B0C0-02CD7FB668FE} PowerPoint …...
照亮技术传播之路:构建卓越的技术文档
照亮技术传播之路:构建卓越的技术文档 引言 在信息技术快速发展的今天,技术文档作为沟通开发者、用户以及其他利益相关者的桥梁,其重要性不言而喻。一份优秀的技术文档不仅能够帮助团队成员理解项目背景和技术细节,还能够在产品…...
20241225在ubuntu20.04.5下监控SSD
20241225在ubuntu20.04.5下监控SSD 2024/12/25 20:29 参考资料: 百度:ubuntu查看ssd寿命 方法 1:使用「磁盘」工具监测 SSD 健康状态 sudo apt install gnome-disk-utility 方法 2:使用 smartctl 工具检查 SSD 健康状态 Ubuntu 和…...
Flink定时器
flink的定时器都是基于事件时间(event time)或事件处理时间(processing time)的变化来触发响应的。对一部分新手玩家来说,可能不清楚事件时间和事件处理时间的区别。我这里先说一下我的理解,防止下面懵逼。…...
《算力互联互通标准体系1.0》发布,为算力互联成网发展提供指导框架
2024年政府工作报告提出:“适度超前建设数字基础设施,加快形成全国一体化算力体系,培育算力产业生态”。因此提供普惠化算力服务、培育算力大市场的算力互联网体系是响应国家布局的重要路径。 我国算力产业发展已取得突破性进展,…...
视频监控平台:Liveweb视频汇聚融合平台智慧安防视频监控应用方案
Liveweb是一款功能强大、灵活部署的安防视频监控平台,支持多种主流标准协议,包括GB28181、RTSP/Onvif、RTMP等,同时兼容海康Ehome、海大宇等厂家的私有协议和SDK接入。该平台不仅提供传统安防监控功能,还支持接入AI智能分析&#…...
STM32串口第一次接收数据时第一个字节丢失的问题
解决方法:开启中断之前,先清除标志位【1】。 串口清除标志位: __HAL_UART_CLEAR_PEFLAG(&huart1); HAL_UART_Receive_IT(&huart1,&RxUart, 1); 定时器清除标志位: __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);…...
Zookeeper基本命令解析
ZooKeeper -server host:port -client-configuration properties-file cmd args addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE addauth scheme auth 一、整体命令格式 ZooKeeper -serve…...
RustDesk远程及自建服务器搭建教程
要开始使用RustDesk远程和自建服务器,你需要遵循以下步骤: 下载和安装RustDesk:RustDesk是一款开源的远程支持应用程序。你可以在其官方网站(https://rustdesk.com/)上下载适用于你的操作系统的安装程序。安装过程非常…...
广州大彩串口屏安卓/linux触摸屏四路CVBS输入实现同时显示!
一、适用范围 适合广州大彩A40系列产品 产品型号: 二、概述 CVBS只需要一条线缆即可完成视频信号的传输,具有兼容性强、使用简单、成本低廉等优点。典型分辨率为720x480(NTSC制)或720x576(PAL制)。 三、…...
Python:模拟(包含例题)
模拟题:直接按照题目含义模拟即可,一般不涉及算法 注意: 1.读懂题:理清楚题目流程 2.代码和步骤一一对应:变量名,函数名,函数功能 3.提取重复的部分,写成对应的函数(…...
Python OCR 文字识别
一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…...
阿里巴巴2017实习生笔试题(二)
阿里巴巴2017实习生笔试题(二) 2024/12/25 1.下面哪一个不是动态链接库的优点? B A.共享 B.装载速度快 C.开发模式好 D.减少页面交换 解析 1 静态链接库的优点 (1) 代码装载速度快,执行速度略比动态链接库快;…...
Docker安装与使用
文章目录 0.关键词1.安装docker2.镜像和容器3.Docker基础1.常见命令2.数据卷(volume)要解决的问题:什么是数据卷:解决的办法: 3.数据卷的使用基本命令挂载数据卷(nginx)基于本地目录数据挂载&am…...
通过nginx设置一个图片服务器,并使用 Nginx 作为反向代理
通过nginx设置一个图片服务器,并使用 Nginx 作为反向代理 安装nginx 首先需要去官网下载一个nginx,我这里下载了最新的稳定版本:nginx-1.26.2,下载下来是一个压缩包,解压之后就可以直接用了。 修改nginx的配置文件 …...
MacOS M3源代码编译Qt6.8.1
编译时间过长,如果不想自己编译,可以通过如果网盘进行下载: 链接: https://pan.baidu.com/s/17lvF5jQ-vR6vE-KEchzrVA?pwdts26 提取码: ts26 在macOS上编译Qt 6需要一些前置步骤和工具。以下是编译Qt 6的基本步骤: 安装Xcode和…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
