优化 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和…...
别再死记硬背CAN协议了!用STM32CubeMX+USB-CAN分析仪,5分钟搞定物理层与数据链路层实战
用STM32CubeMXUSB-CAN分析仪5分钟掌握CAN核心原理 当你第一次接触CAN总线时,是否被那些晦涩的术语搞得一头雾水?显性电平、位填充、采样点、仲裁机制...这些概念在纯理论讲解中往往显得抽象难懂。但今天,我要带你用一种全新的方式学习CAN——…...
网站SEO查询工具可以分析什么
网站SEO查询工具可以分析什么 在当今互联网时代,网站的SEO(搜索引擎优化)已经成为了提高网站流量和用户参与度的关键因素。而SEO查询工具则是让网站运营者在优化过程中扮演重要角色的工具。具体来说,网站SEO查询工具可以分析什么…...
OpenClaw+Qwen3-14b_int4_awq:智能客服对话日志分析工具
OpenClawQwen3-14b_int4_awq:智能客服对话日志分析工具 1. 为什么需要自动化客服日志分析 上个月我接手了一个小团队的客服优化项目,每天要处理上百条对话记录。手动翻阅这些聊天内容不仅耗时,还容易遗漏关键问题。最头疼的是,当…...
Vue3集成百度地图GL版:从自定义样式到动态轨迹绘制实战
1. Vue3集成百度地图GL版的前期准备 第一次在Vue3项目里用百度地图GL版时,我踩了不少坑。这里分享下最稳妥的集成方案,帮你避开那些我趟过的雷。首先得明白,百度地图GL版是基于WebGL技术的新一代地图API,相比传统版本性能更好、效…...
深度强化学习算法DDPG、TD3与SAC在MuJoCo机器人实验环境下的研究
深度强化学习算法:DDPG TD3 SAC 实验环境:机器人MuJoCoHalfCheetah-v2 深度强化学习实验框架功能说明书——A3C / DDPG / SAC / TD3 一体化训练与评测平台 产品定位 本框架面向机器人连续控制研究场景,基于 MuJoCo 的 HalfCheetah-v2 环境&am…...
2026降AI工具终极实测:笔灵AI遥遥领先,免费与付费的真实差距
最近收到大量关于求推荐降AI工具的咨询。随着Turnitin、知网、GPTZero等检测平台更新,AI生成的文字很容易被识别。 为了找到有效的工具,我耗时半个月,测试了10款主流工具。本文将基于降AI效果、可读性、成本三个维度,为你提供一份…...
作业61 10 11 12
# 输入三角形三边a float(input("请输入三角形的边A:"))b float(input("请输入三角形的边B:"))c float(input("请输入三角形的边C:"))# 判断是否能构成三角形(边长>0 且 任意两边之和大于第三…...
深度解析bilibili-linux:Linux平台上的专业级B站客户端完整指南
深度解析bilibili-linux:Linux平台上的专业级B站客户端完整指南 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux bilibili-linux是一款专为Linux系统设计的开…...
零基础快速入门前端 图片水印生成 蓝桥杯真题速刷(助力保底拿奖不捐款)
完成后的效果如下: for (let i 0; i < count; i) {let spandocument.createElement(span)span.innerHTMLtextspan.style.colorcolorspan.style.transformrotate(${deg}deg)span.style.opacityopacitycontainer.appendChild(span) } 1. appendChild 及其…...
用快马AI快速原型一个全球数据监控仪表盘,十分钟搞定基础框架
今天想和大家分享一个快速搭建全球数据监控仪表盘的经验。作为一个经常需要分析国际数据的产品经理,我一直在寻找能快速验证想法的工具。最近发现InsCode(快马)平台特别适合做这种原型开发,十分钟就能搞定基础框架。 项目构思 这个仪表盘需要展示全球主要…...
