MySQL数据库基础2

news2024/11/25 21:32:01

文章目录

  • 数据类型
  • 表的约束

数据类型

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

需要注意的是:

主键不能为空,不能重复;
一张表只能有一个主键;
主键列通常为整数(方便建立索引)

主键不能为空:

![在这里插入图片描述](https://img-blog.csdnimg.cn/cc14e5351af6484699ccb1a3351edfb2.pn

在这里插入图片描述

主键不能重复:

在这里插入图片描述

创建主键的几种方式:

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 主表(列)
在从表中定义外键。

使用外键约束可以避免不必要的数据冗余,提高数据的一致性和完整性,但是同时会增加操作的复杂度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/529704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5年测试,已失业3个月.....

我做测试5年,一线城市薪水拿到15K,中间还修了一个专升本,这个年限不说资深肯定也是配得上经验丰富的。今年行情不好人尽皆知,但我还是对我的薪水不是很满意,于是打算出去面试,希望可以搏一个高薪。 但真到面…

测试自动化工具_Katalon

测试自动化_Katalon 1.概述 ​ Katalon界面的自动化测试工具,简称KS,于2015年推出。是开源的,提供的版本有免费的版本,还有企业版是收费的。如下图。其中的服务台功能应该是持续继承的支持。可试用一个月。 ​ 最初是支持Web UI…

Chatgpt论文笔记——MiNiGPT4解读

前言 代码地址:https://github.com/Vision-CAIR/MiniGPT-4 摘要 摘要写的就很简单了,标黄的是重点,可以看到这个方法很简单,就是拿了一个视觉的encoder(Blip-2)以及拿了一个文本的encoder(Vic…

OpenPCDet系列 | 5.2 PointPillars算法——PointPillarScatter伪图像BEV特征构建模块

文章目录 PointPillarScatter模块1. PointPillarScatter初始化2. PointPillarScatter前向传播 OpenPCDet的整个结构图: PointPillarScatter模块 在进行了PillarVFE编码后,此时的batch_dict更新如下所示,追加了pillar_features字段&#xf…

好程序员:转行学Java怎么样?什么工作可以月入过万?

去年的时候有个学妹跟小源说,想转行,但是目前又比较迷茫,不知道该从事啥行业?她跟小源说了下具体情况,本科学历,Java零基础。小源让好程序员的就业老师跟她分享了下相关的it行业规划,最后她学了…

Python实现ACO蚁群优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

关于摄影艺术欣赏分享(私密空间+玛丽娜·阿布拉莫维奇+世界十大最昂贵的摄影作品欣赏+《死亡路上的对话》+马良作品)

文章的内容灵感是旁听课而来的呀,搜了很多相关文章很喜欢 1. 出去遛狗,晚点回来 国外文化中国文化(国外不可以随意拍摄照片) 公共空间私密空间 艺术的价值在于可以给人们思考,颠覆常识 2. 行为艺术之母玛丽娜阿布拉…

YOLOv5【目录结构源码】超详细注释解读!!!建议收藏✨✨!

上一篇文章介绍了YOLOv5的网络的详细解读:直通车🚀 由于以后的学习及在进行的项目打算YOLOv5再仔细研究进行使用及改进,接下来会出相关于YOLOv5的代码逐行解读以及注释,废话不多说,让我们一起学习YOLOv5源码吧&#xf…

CTFshow pwn03

题目: 在做本道题前,我们先了解所必要的知识 Libc是什么? 英文名字:Standard C library,其翻译过来,C语言标准库 它是符合ANSI C标准的一个函数库 学过C语言会明白 ANSI C标准又是什么? 198…

Redo log

目录标题 前言为什么需要redo log redo log中的WAL(先写日志,再写磁盘)重要参数innodb_flush_log_at_trx_commit如何选择 redo log记录形式日志块(log block)redo log的格式 redo log何时刷入磁盘正常关闭服务器时事务提交时(inno…

【STL】string的使用

放在专栏【C知识总结】,会持续更新,期待支持🌹 STL简介 STL的诞生 STL为英文Standard Template Library的缩写,译为标准模板库。是C标准库的重要组成部分。 长久以来,软件届一直希望建立一种可重复运用的东西。所谓…

首个支持RWA交易的订单簿DEX-PoseiSwap,即将开启IEO

随着 DeFi 世界的发展,越来越多的链上协议支持以合成资产的方式,将传统金融资产以加密资产的形式映射至链上,包括美股、黄金期货等等,虽然这种方式进一步帮助投资者,以非许可的形式丰富了投资标的,但这种方…

GraphPad Prism 9.5.1 for Mac 操作简便功能强大且实用的医学绘图分析工具

GraphPad Prism简介 GraphPad Prism是一款非常实用的统计软件,其功能非常强大,能够帮助用户进行各类科研数据的处理和分析,快速绘制出各种专业的图像和数据报告。 GraphPad Prism软件的用户界面非常友好,易于学习和操作&#xf…

azkaban 安装 使用

目录 拷贝安装包 解压 改名 修改MySQL配置文件 创建数据库 导入数据表 修改配置文件 修改azkaban-exec下面文件 修改azkaban.properties文件 修改 commonprivate.properties 文件 修改MySQL的jar包 启动 azkaban-exec 修改azkaban-web下面文件 修改azkaban.prop…

Amazon EKS 上有状态服务启用存储加密

1.背景 用户通过 Deployment, Replication Controller 可以方便地在 Kubernetes 中部署一套高可用、可扩展的分布式无状态服务。这类应用不在本地存储数据,通过简单的负载均衡策略可实现请求分发。 Deployment 以及 Replication Controller 是为无状态服务而设计的…

关于Alibaba开发手册中提到的Manager层解析(对于传统MVC三层架构的改进)

Manager层的理解 MVC三层架构 MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面…

scanf函数的用法

有时候刷题经常遇到如下这种输入&#xff1a; 1 2 3 4 ...... 就是不知道什么时候结束输入&#xff0c;反正就是一直在输入&#xff0c;这个时候怎么写呢&#xff1f;我们知道 scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF. 看如下代码&#xff1a; #include<st…

mysqlbinlog 生产环境问题排查实践

binlog 简介 MySQL 的二进制日志是通过二进制文件形式记录的&#xff0c;可以通过以下方式设置其格式&#xff1a; 打开 MySQL 配置文件&#xff08;my.cnf&#xff09;&#xff0c;找到 [mysqld] 段&#xff0c;添加以下语句以开启二进制日志功能&#xff1a; log-bin /pat…

Git 工作原理和分支管理

Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理 Git工作原理 Git 会把仓库中的每次提交串成一条时间线&#xff0c;这条时间线就是一个分支。在 Git 里&#xff0c;每个仓库都会有一个主分支&#xff0c;即master分支。HEAD…

2023面试自动化测试面试题【含答案】,建议收藏

1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编程语言来实现&#xff1b…