MySQL数据库基础2
文章目录
- 数据类型
- 表的约束
数据类型
1、数值类型:BIT、TINYINT、BOOL、SMALLINT、INT、BIGINT、FLOAT[(M,D)]、DOUBLE[(M,D)]、DECIMAL[(M,D)]
- FLOAT[(M,D)]:占用四个字节,M表示显示位数,D表示小数位数,精度保证:6~7位
- DOUBLE[(M,D)]:占用八个字节,M表示显示位数,D表示小数位数,精度15~16位
上面两种类型需要引起注意的是,M和D会限制数据的大小范围,举例如下:

在上表中插入数据:

报错原因是尝试插入的值1.2超过了该列的数据类型范围。
Type的double(3,3)表示了插入的数据不能大于1了,所以要注意M和D带来的数据范围的限制。
- DECIMAL[(M,D)]:是MySQL自有的一个类型,M表示显示位数,D表示小数位数,它不是按照浮点数来进行存储的,它是按照字符串来进行存储的,所以理论上来说,精度不会丢失,但是在存储的时候,一定确定存储的小数和D的关系。M最大为65,D最大为30.

2、文本、二进制类型:CHAR(size)、VARCHAR(size)、TEXT(大文本类型)、BLOB(二进制类型)
- 固定长度字符串
char(size):固定长度字符串,size是可以存储的长度(个数),单位为字符,最大长度值可以为255
每个字符所占的字节和字符集强相关
- 可变长度字符串
varchar(size):可变长度字符串,size表示该字段可以存储的最大字符数,最大长度为65535个字节
size最大有多大:
需要1~3字节用来记录字符串的长度(因为长度可变),按照最大情况计算,所以剩余字节数量就是65532;
在utf8字符集中,字符占用的字节数量为1~3字节,所以按照最大3字节计算,可以存储65535/3=21844个字符;
size的大小和字符集息息相关。size所指定的字符数是指该字段所占用的字节数的上限,并不是存储的实际字符数,例如,如果使用‘utf8mb4’字符集(一个中文字符占用四个字节),则 varchar(50)的字段可以存储12个中文字符。
如何选择定长或变长字符串呢?
如果数据确定长度都一样,就使用定长(char),比如身份证号、手机号等
定长的磁盘空间比较浪费,但是效率高,直接开辟好对应的空间
变长的磁盘空间比较节省,但是效率低,在不超过自定义范围的情况下,用多少,开辟多少
3、时间/日期类型
- date:日期,yyyy-mm-dd,年月日,占用三个字节
- datetime:时间日期,yyyy-mm-dd HH:ii::ss ,表示范围从1000到9999,占用八字节
- timestamp:时间戳,从1970年开始的,yyyy-mm-dd HH:ii:ss,格式和datetime完全一致,计算的是秒数,占用四个字节,时间戳可用于统一软件时间

我们在t3这张表中插入数据,多次执行下面这条语句:
insert into t3(d1,d2) values('2023-05-13','2023-05-13 17:11:10');
插入多条数据后,我们来看一下表中数据结果:

时间戳是自动插入的,可以看到,它是在变化的,随着时间流动而流动。
4、枚举类型
enum(’ 选项1’,选项2’,’选项3’,…);
枚举的设定提供了若干个选项的值,最终的一个单元格中,实际只存储了枚举选项中的
一个值。
在插入时,不能插入枚举选项中没有的值。

5、集合类型
set(’ 选项1’,选项2’,’选项3’,…);
集合设定提供了若干个选项的值,最终的一个单元格中,可以存储选项的
任意多个值。这点是和枚举的差别,枚举只允许存储一个值。

集合查询使用find_in_set函数:
find_in_set(sub, str_list):如果sub在str_list中,则返回下标,如果不在,返回0;str_list是用逗号分隔的字符串

表的约束
表的约束是指除列字段类型约束之外的额外约束。
1、空约束
null:该属性值可以为空
not null:该属性值不可以为空,如果要求哪个属性值不能为空,在create表的时候加上not null。

2、默认值
在列定义的后面,加上default [value];
当插入数据的时候,提供的数据不包含有默认值的列时,采用默认值

3、列描述
comment:列描述,对于插入/删除/查询没有影响,相当于是列注释(给开发者准备的)
我们创建一个表:
create table t1(id int comment 'stu id', name varchar(10) default 'xh' comment 'name');
显示一下表的创建过程:

4、zerofill格式化输出
设置了zerofill的字段会按照设定的宽度进行输出。如果本身宽度不够,高位补0,但是在真实存储的时候,还是按照原生的数字进行存储的。

int(5)在输出的时候,就会输出5位。
5、主键(主键约束)
主键是用于唯一标识数据库表中每一行记录的一列或者一组列,主键的值必须唯一、非空,并且在表的每一行记录中唯一标识该行记录,主键可以由一列或多列组成,如果由多列组成,则称为复合主键。
主键可以帮助提高数据的查询效率,并确保数据的一致性和完整性,主键常常和外键一起使用,来构建数据库之间的关系。
约束列字段关键词:primary key
需要注意的是:
主键不能为空,不能重复;
一张表只能有一个主键;
主键列通常为整数(方便建立索引)
主键不能为空:


主键不能重复:

创建主键的几种方式:
1)创建表时指定主键
- 直接在某个字段后面指定
create table [表名称] (字段1 字段1类型 primary key,…);

- 在所有字段后面指定主键
create table [表名称] (字段1 字段1类型,字段2 字段2类型,字段3 字段3类型 primary key,(字段名称));

2)alter修改表结构
alter table [表名称] add primary key([列名称])
删除主键:
alter table [表名字] drop primary key;
复合主键:
指的是多个列共同组成的主键,可以唯一标识一条记录,由于复合主键包含多列,因此可以更加准确地确定记录的唯一性。
6、自增长
auto_increment是MySQL中自增长的关键字,被设置为自增长的字段,如果不提供数据,会自动的被系统触发,系统会从当前字段中已有的最大值+1操作,得到一个新的不同的值。

自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引;自增长字段必须是整数;一张表最多只能有一个自增长
7、唯一键
一张表中往往有很多字段数据不能重复,需要唯一性,可能会有人想,那就把这样的字段设置有主键,但是需要注意的是一张表中只能有一个主键,所以主键解决不了这个问题,这个时候,唯一键就出现了,用来解决表中有多个字段需要唯一性约束的问题。
关键字:
unique
唯一键不能重复,可以为空。
8、外键
外键是用来建立两个表之间关联的一种机制,用于保证数据的一致性和完整性。
在关系型数据库中,可以通过外键将两个表联系起来,使得一个表中的某一个或某几列可以引用另一个表中的主键,从而在两个表之间建立关联关系。
在MySQL中,外键约束可以通过FOREIGN KEY关键字来实现,需要满足以下条件:
- 外键必须引用另一个表的主键或唯一键
- 外键约束只能在InnoDB存储引擎中使用
- 外键约束需要满足参照完整性约束,即要求在添加或更新记录时,外键值必须与另一个表中的主键或唯一键值相匹配
两个表从逻辑上区分为主表和从表,外键的约束定义在从表上,主表的字段需要是主键。
从表定义的外键,本质上是通过主表的字段值,来约束从表当中的外键列
如何定义外键:
foreign key(字段名)reference 主表(列)
在从表中定义外键。
使用外键约束可以避免不必要的数据冗余,提高数据的一致性和完整性,但是同时会增加操作的复杂度。
相关文章:
MySQL数据库基础2
文章目录 数据类型表的约束 数据类型 1、数值类型:BIT、TINYINT、BOOL、SMALLINT、INT、BIGINT、FLOAT[(M,D)]、DOUBLE[(M,D)]、DECIMAL[(M,D)] FLOAT[(M,D)]:占用四个字节,M表示显示位数,D表示小数位数,精度保证&am…...
AutoSAR PNC和ComM
文章目录 PNC和ComMPNC管理NM PDU结构及PNC信息位置如何理解节点关联PNCPNC状态管理 ComM 通道状态管理 PNC和ComM PNC 和 ComM层的Channel不是一个概念,ComM的Channel对应具体的物理总线数。 在ComM模块中,一个Channel可以对应一个PNC,也可…...
Android studio Camera2实现的详细流程
流程 一、获取CameraManager实例二、获取可用的相机列表三、选择一个相机并打开它四、创建一个CaptureRequest.Builder对象五、设置CaptureRequest.Builder对象的参数六、创建一个CaptureSession对象七、开始预览 代码示例 一、获取CameraManager实例 CameraManager manager (…...
阿里云数据库ClickHouse产品和技术解读
摘要:社区ClickHouse的单机引擎性能十分惊艳,但是部署运维ClickHouse集群,以及troubleshoot都不是很好上手。本次分享阿里云数据库ClickHouse产品能力和特性,包含同步MySQL库、ODPS库、本地盘及多盘性价比实例以及自建集群上云的迁…...
分子动力学基础知识
分子动力学基础知识 目前主要存在两种基本模型:其一为量子统计力学, 其二为经典统计力学。 量子统计力学 基于量子力学原理, 适用 于微观的, 小尺度, 短时 间的模拟,可以描述电子 的结构分布,原子间的成 键断键等化学性质。 经典纭计力学…...
USB转UART转串口芯片 GP232RNL国产低成本替代FT232RL/FT232RNL
近期收到很多人咨询FT232RL跟新版FT232RNL两者有什么区别,实际上就是内部做了一点升级,FT232RNL支持Windows11系统,参数并没有改动,完全可以直接替换使用。 今天小编给大家讲讲FT232RNL国产低成本替代芯片–GP232RNL GP232RNL 是…...
第03讲:SpringCloudStream实现分布式事务
需求分析 本案例是通过一个发送短信验证码的功能来实验MQ发送消息时实现分布式事务,思路分析如下 消息生产者生产发送验证码的半消息 生产者执行本地事务(将验证码保存到数据库),并记录事务的ID,如果整个过程不出现异…...
【从零开始学Skynet】高级篇(一):Protobuf数据传输
1、什么是Protobuf Protobuf是谷歌发布的一套协议格式,它规定了一系列的编码和解 码方法,比如对于数字,它要求根据数字的大小选择存储空间,小于等于15的数字只用1个字节来表示,大于15的数用2个字节表示,以此…...
快速入门Lombok
Lombok是一个Java库,可以通过注解的方式来简化Java代码,它可以自动生成Getter、Setter、构造函数等代码,从而减少重复的模板代码。下面是Lombok的使用详情: 1. 添加Lombok依赖 在使用Lombok之前,我们需要先添加Lombo…...
Linux 常见命令与常见问题解决思路
Linux 常见命令 Linux 基础命令目录相关查看文件(日志)查看普通的文件查看压缩的文件 解压压缩Linux 系统调优topvmstatpidstatps vi/vim 编辑文件查找文件属性相关定时任务scp 复制文件和目录awk 分隔cutsort 与 uniq常见问题处理思路CPU 高系统平均负载…...
用GPT-4 写2022年天津高考作文能得多少分?
正文共 792 字,阅读大约需要 3 分钟 学生必备技巧,您将在3分钟后获得以下超能力: 积累作文素材 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Linda ●图片由Lexica …...
Django如何把SQLite数据库转换为Mysql数据库
大部分新手刚学Django开发的时候默认用的都是SQLite数据库,上线部署的时候,大多用的却是Mysql。那么我们应该如何把数据库从SQLite迁移转换成Mysql呢? 之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数…...
使用apisix代理静态文件
前言 最近公司考虑用apisix作为公司网关并且部署到k8s上,我这边收到一个小任务:使用apisix代理静态文件 通过apisix官网了解到它构建于 NGINX ngx_lua 的技术基础之上,所以按理应该和nginx代理静态资源是一样的。因为是通过docker容器部署…...
[元带你学NVMe协议] NVMe1.4 多路径(Multipathing)
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 全文9100字, 主要内容 目录 前言 1 多路径(Multipathing)概念...
Elasticsearch:如何使用自定义的证书安装 Elastic Stack 8.x
在我之前的文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch”,我详细描述了如何在各个平台中安装 Elastic Stack 8.x。在其中的文章中,我们大多采用默认的证书来安装 Elasticsearch。在今天的文章中,我们用自己创…...
HADOOP--yarn ,, git
Yarn架构体系 主从架构 也是采用 master(Resource Manager)- slave (Node Manager)架构,Resource Manager 整个集群只有一个,一个可靠的节点。 1、 每个节点上可以负责该节点上的资源管理以及任务调度&am…...
IOS开发指南之UITableView控件使用
1.创建一个IOS单页应用 2.双击Main.storyboard然后拖放UITableView到视图中 3.添加TableViewCell 成功添加Table View Cell 4.修改Table View Cell属性 选中Table View Cell 在右边的Image栏输入default.png回车 到此布局设计完成,现在运行还是显示 空白,要在代码中做相关的实…...
C语言中的数据类型
目录 一、数据类型 1.基本类型 2.sizeof运算符 3.signed和unsigned 二、基本数据类型的取值范围 1.比特位 2.字节 3.符号位 4.补码 5.基本数据类型的取值范围 一、数据类型 1.基本类型 (1)整数类型 short intintlong intlong long int &…...
什么是微服务中的熔断器设计模式?
在本文中,我将解释什么是熔断器设计模式以及它解决了什么问题。 我们将仔细研究熔断器设计模式,并探讨如何使用Spring Cloud Netflix Hystrix在Java中实现它。到本文结束时,您将更好地了解如何使用熔断器设计模式提高微服务架构的弹性。 熔断…...
Ubuntu查看系统日志的几种方法
在 Ubuntu 22.10 中,你可以查看系统日志来排查错误。以下是几种查看日志的方法: 一、Journalctl 命令: 使用 journalctl 命令可以查看系统日志信息,包括引起闪退的错误信息。你可以运行以下命令来查看最新的系统日志:…...
从MobileNet到FasterNet:一个ARM安卓开发者的轻量级模型选型与部署实战笔记
从MobileNet到FasterNet:ARM安卓开发者的轻量级模型选型与部署实战 在移动端AI应用开发中,模型选型往往是一场精度与速度的博弈。作为一名长期奋战在ARM平台部署一线的工程师,我经历过太多次这样的场景:产品经理要求"既要实时…...
避坑指南:MTK DRM屏兼容中,那些容易让你“点不亮”的硬件与配置细节(附TP复位脚案例)
MTK DRM屏兼容开发实战:从硬件引脚到驱动配置的深度避坑指南 在MTK平台的多屏兼容开发中,工程师们常常会遇到屏幕"点不亮"的棘手问题。这类问题往往源于硬件连接、引脚配置或驱动编译选项中的细微疏忽。本文将结合真实案例,深入剖…...
实战:用MAF的“人机协同”功能,给你的AI工具调用加上一道安全锁(附C#代码)
企业级AI代理安全实践:基于MAF的人机协同审批架构设计 当财务系统自动驳回了一笔高管差旅报销,或是订单管理系统未经确认修改了客户历史数据时,企业往往需要付出高昂的信任成本来修复这类"自动化事故"。Microsoft Agent Framework&…...
Torch-Pruning支持神经辐射场(NERF):3D重建模型压缩终极指南
Torch-Pruning支持神经辐射场(NERF):3D重建模型压缩终极指南 【免费下载链接】Torch-Pruning [CVPR 2023] Towards Any Structural Pruning; LLMs / Diffusion / Transformers / YOLOv8 / CNNs 项目地址: https://gitcode.com/gh_mirrors/to/Torch-Pruning 神…...
Linux文件IO编程实战:用GEC6818开发板上的C程序玩转open/read/write/lseek
Linux文件IO编程实战:GEC6818开发板上的C语言文件操作精要 在嵌入式Linux开发中,文件操作是最基础也是最重要的技能之一。GEC6818作为一款广泛应用于教学和工业场景的开发板,其Linux系统编程能力尤为关键。本文将带你深入理解Linux"一切…...
如何借助内网穿透工具实现WinSCP跨系统远程文件管理的稳定连接
1. 为什么需要内网穿透实现WinSCP远程文件管理 作为开发者或运维人员,我经常需要在Windows和Linux服务器之间传输文件。最初我尝试用U盘或网盘中转,但效率太低;后来改用WinSCP直连局域网,又遇到跨地域办公的难题。直到发现内网穿透…...
RCE漏洞小结
RCE漏洞简介 所谓RCE漏洞,即Remote Code/Command Execution,远程代码执行和远程命令执行漏洞。在很多Web应⽤中,开发⼈员会使⽤⼀些函数,这些函数以⼀些字符串作为输⼊,功能是将输⼊的字符串当作代码或者命令来进⾏执…...
手把手教你为本地LLM(Llama/Qwen)实现打字机式流式输出,Gradio+Transformers保姆级教程
手把手教你为本地LLM实现打字机式流式输出:Gradio与Transformers深度整合指南 当我们在本地部署大语言模型时,最令人沮丧的体验莫过于盯着进度条等待完整响应。想象一下这样的场景:你向模型提出一个复杂问题,屏幕陷入长达十几秒的…...
六足机器人如何自己“学会”走路?手把手教你用Q-learning实现自适应步态
六足机器人如何自己“学会”走路?手把手教你用Q-learning实现自适应步态 想象一下,当你把一只六足机器人放在崎岖不平的地面上时,它能够像昆虫一样迅速调整自己的步伐,找到最稳定的行走方式。这种看似简单的行为背后,隐…...
互联网一线大厂最新版 Java面试八股文(含答案,万字总结,精心打磨,建议收藏)
Java 面试 Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初入职场的时候,类似于 Vector 与 A…...
