【MySQL】MySQL 数据类型

news2024/11/24 1:12:30

目录

1. tinyint 类型

2. bit 类型

3. 小数类型

1、float 类型

2、decimal 类型

3. 字符串类型

1、char 类型 

2、varchar 类型

4. 日期类型

5. enum和set

1、枚举和集合类型语法

2、枚举和集合类型的查找

6、find_in_set 函数

写在最后:


1. tinyint 类型

我们以 tinyint 类型为例子,介绍 int 系列的类型。

1)我们先建一个简单的表:

create table if not exists t1(
    num tinyint
);

2)然后我们直接观察三连查看一下这个表:

操作包含:

desc t1;
show tables;
show create table t1;

3)接下来就是插入操作:

tinyint 的取值范围是 -128 ~ 127,我们现在就来插入一些值试试:

insert into t1 values (-128);
insert into t1 values (127);
insert into t1 values (0);
insert into t1 values (1);
insert into t1 values (-1);

然后我们再查看一下我们刚刚插入的数据:

select * from t1;

如果我们插入一个不正确的值呢:

MySQL 会直接报错,不让我们插入。

接下来我们再建一个表,创建一个无符号的类型:

create table if not exists t1(
    num tinyint unsigned
);

他的数据范围是 0 ~ 255。

所以如果我们插入负数那肯定是会报错的:

2. bit 类型

1)老规矩,还是从建表开始:

create table if not exists t3(
    id int,
    online bit(1)
);

2)查看表:

3)插入数据:

insert into t3 (id, online) values (123, 1);
insert into t3 (id, online) values (123, 2);

 插入了 2 就报错了,因为它只支持一个比特位:

我们可以修改他的值:

alter table t3 modify online bit(10);

我们可以看到这里修改成功了:

如果我们建表的时候不带 bit 的大小,他默认是 1 。

3. 小数类型

1、float 类型

 1)老样子,从建表开始学习:

create table if not exists t5(
    id int,
    salary float(4, 2)
);

2)查看一下表:

3)尝试插入数据:

insert into t5 (id, salary) values (1, 99.99);
insert into t5 (id, salary) values (1, 199.99);

float 类型的括号里面,第一个是他的位数,我们选了 4 所以最多 4 位,

第二个是他的精度,我们选了 2 所以他的小数位最多 2 位。 

这里要注意的是,因为精度要求的是两位,所以整数部分也只能是两位。

这里又有一种和神奇的现象,就是精度部分是按照四舍五入进行计算的,

所以 99.994 是允许插入这样的数的。

我们在建表的时候,在 float 类型后面也可以加上 unsigned 让他成为无符号。          

如果是默认使用的 float ,就是自己设定,那他会有一定的精度损失。(大约是 7 位)

2、decimal 类型

在使用上面,他跟 float 类型一模一样。

但是他对于 float 有着独特的优势,这里我就直说了:

float 在存一些数字比较大的数的时候,会出现精度丢失的问题,

但是 decimal 存的是什么他就是什么。

3. 字符串类型

1、char 类型 

1)建表

create table if not exists t8(
    id int,
    name char(2)
);

2)插入数据:

我们就能知道 char (2) 就是字符长度最长是 2。

注意:char 最大只能是 255。

2、varchar 类型

1)建表

create table if not exists t7(
    id int,
    name varchar(6)
);

2)插入

可以看到他最大能插入的长度是 6 。注意 varchar 最长支持 21845。

那 char 和 varchar 看起来一样,他们的区别是什么?

char 是定长(一开始就开辟好),varchar 是变长的(用多少,开辟多少)

4. 日期类型

有三种常见的日期类型:date,datetime,timestamp

1)建表

create table if not exists t9(
    t1 date,
    t2 datetime,
    t3 timestamp
);

2)查看表

时间戳有个默认值,应该是当前的时间戳。

3)插入值

我们可以看到,这样是插入成功的

4)查看插入结果

 t3 自动显示了当前的时间。

5. enum和set

1、枚举和集合类型语法

enum 枚举值是单选类型

set 集合类型是多选类型

1)建表

create table if not exists t10(
    username varchar(20),
    sex enum('男', '女'),
    hobby set('写代码', '睡觉', '打游戏')
);

2)查看表

3)插入值 

然后:

我们可以看到我们插入的值。

这里要注意的是,以后再 sex 位置插入时,只能插入他给的枚举值,而枚举值从 1 开始,所以也可以通过插入枚举值来代表我们插入的值,比如说插入 1 就是插入 男。 

我们再来试试能不能给集合插入多个值:

我们可以看到是可以插入多个值的。这里要注意的是,如果什么都不插入,就会是  NULL,如果插入 0 就会是一个空串,但是集合中的数字跟枚举的不同,我们可以把这个集合中的 3 个值想象成一个二进制 000,最低位代表的是第一个值,所以插入 1 就是 001,插入写代码:

如果插入的是 3 ,插入的就应该是 写代码和睡觉:

可以看到确实是这样。 

总结:枚举是下标,集合是位图。

2、枚举和集合类型的查找

 先来根据枚举值查找:

select * from t10 where sex=1;
select * from t10 where sex=2;

集合其实也是这样找:

select * from t10 where hobby=1;
select * from t10 where hobby=3;
select * from t10 where hobby=7;

那如果我们想要筛选出,比如说爱好有睡觉的都找出来,那该怎么找?

因为我们上面的查找都是严格的匹配,有没有更灵活的方式呢?

6、find_in_set 函数

实际上,在 MySQL 里面是可以执行函数的:

find_in_set 只能查找一个元素是否在对应的集合里面。

这样我们就可以:

select * from t10 where find_in_set('睡觉', hobby);

 成功找到了。

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

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

相关文章

关于Java反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解…

MyBatis Plus-个人笔记

前言 学习视频 尚硅谷-Mybatis-Plus教程学习主要内容 本文章记录尚硅谷-Mybatis-Plus教程内容,只是作为自己学习笔记,如有侵扰请联系删除 一、MyBatis-Plus简介 1、简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具&#…

BGP基础实验建邻+宣告实验

实验题目如下: 实验拓扑如下: 实验要求如下: 【1】除R5的5.5.5.0环回外,其他所有的环回均可互相访问 实验思路如下: (1)合理的IP配置 (2)合理的BGP配置 (…

监控Kubernetes Node组件的关键指标

所有的 Kubernetes 组件,都提供了 /metrics 接口用来暴露监控数据,Kube-Proxy 也不例外。通过 ss 或者 netstat 命令可以看到 Kube-Proxy 监听的端口,一个是 10249,用来暴露监控指标,一个是 10256 ,作为…

【IC萌新虚拟项目】代码覆盖率收集与反馈

关于整个虚拟项目,请参考: 【IC萌新虚拟项目】Package Process Unit项目全流程目录_尼德兰的喵的博客-CSDN博客 前言 实际参与过项目的同学一定对质量活动这四个字深恶痛绝,项目进入质量活动阶段时,意味着RTL的时序和面积功耗等主…

【算法训练营】队列 合集(1)

📍前言 本篇将学习queue的OJ题并学习queue的基础知识。 🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易&a…

Linux Day07

一、僵死进程 1.1僵死进程产生的原因 子进程先于父进程结束, 而父进程没有获取子进程退出码,释放子进程占用的资源,此时子进程将成为一个僵死进程。 在第一个框这里时父进程子进程都没有结束,显示其pid 父进程是2349,子进程是235…

nnU-Net 终极指南

一、说明 了解最先进的nnU-Net以及如何将其应用于您自己的数据集所需的一切。使用nnU-Net,这是语义图像分割中非常强大的基线。在本指南中,您将: 对nnU-Net的主要贡献进行简要概述。了解如何将 nnU-Net 应用于您自己的数据集。 但是&#xff…

【C++】set 和 map 简单了解使用

文章目录 关联式容器set 和 multisetmap 和 multimap 关联式容器 set 和 multiset map 和 multimap

【福建事业单位-资料分析】04 倍数、特殊增长率

【福建事业单位-资料分析】04 倍数、特殊增长率 一、倍数1.1现期倍数1.2 基期倍数总结 二、特殊增长率2.1 间隔增长率间隔倍数和间隔基期(都要先求得间隔增长率r) 2.2 年均增长率年均增长率的比较年均增长率计算-居中代入 2.3 混合增长率总结 三、总结 一…

Git入门到精通——保姆级教程(涵盖GitHub、Gitee、GitLab)

文章目录 前言一、Git1.Git-概述1.1.Git-概述-版本控制介绍1.2.Git-概述-分布式版本控制VS集中式版本控制1.3.Git-概述-代码托管中心1.4.Git-概述-安装和客户端的使用 2.Git-命令(常用命令)2.1.Git-命令-设置用户签名2.2.Git-命令-初始化本地库2.3.Git-命令-查看本地库状态2.4.…

goto语句

goto语句也称为无条件转移语句。 goto的语法:goto 语句标号; 语句标号的语法:语句标号: 如果在程序中使用了goto,程序的流程将跳转到语句标号的位置,并执行它后面的代码。 其中语句标号是按标识符规定书写的符号,放…

计算机网络实验2:网络嗅探

文章目录 1. 主要教学内容2. Wireshark介绍3. Wireshark下载4. 使用Wireshark捕获包4.1 选择网卡4.2 停止抓包4.3 保存数据 5. Wireshark的过滤规则6. Wireshark实例 1. 主要教学内容 实验内容:安装、学习使用网络包分析工具Wireshark。所需学时:1。重难…

信息安全:访问控制技术原理与应用.

信息安全:访问控制技术原理与应用. 访问控制是网络信息系统的基本安全机制。访问控制是指对资源对象的访问者授权、控制的方法及运行机制。访问者又称为主体,可以是用户、进程、应用程序等;而资源对象又称为客体,即被访问的对象&…

搞定libstdc++.so.6 version GLIBCXX_3.4.21 not found

一、问题: 今天在安装whisper的时候,突然间报了这样一个错误: OSError: Could not load shared object file: libllvmlite.so Errors were: [OSError("/lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by /opt/con…

【直接收藏】前端 VUE 高阶面试题(一)

1.说说vue动态权限绑定渲染列表&#xff08;权限列表渲染&#xff09; 首先请求服务器,获取当前用户的权限数据,比如请求 this.$http.get("rights/list"); 获取到权限数据之后,在列表中使用v-if v-if-else的组合来展示不同的内容 <template><div><…

cpu的架构

明天继续搞一下cache,还有后面的, 下面是cpu框架图 开始解释cpu 1.控制器 控制器又称为控制单元&#xff08;Control Unit&#xff0c;简称CU&#xff09;,下面是控制器的组成 1.指令寄存器IR:是用来存放当前正在执行的的一条指令。当一条指令需要被执行时&#xff0c;先按…

nginx基于主机和用户访问控制以及缓存简单例子

一.基于主机访问控制 1.修改nginx.conf文件 2.到其他主机上测试 &#xff08;1&#xff09;191主机 &#xff08;2&#xff09;180主机 二.基于用户访问控制 1.修改nginx.conf文件 2.使用hpasswd为用户创建密码文件&#xff0c;并指定到刚才指定的密码文件webck 3.测试…

腾讯云轻量应用服务器和云服务器有什么区别?

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器价格便宜&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

算法套路二十——单调栈

算法套路二十——单调栈 单调栈是一种特殊的数据结构&#xff0c;用于解决与元素的相对大小有关的问题。它是一个栈&#xff0c;但其中的元素以单调递增或单调递减的顺序排列&#xff0c;用于处理与相对大小有关的问题。 算法示例&#xff1a;下一个更大元素 给定一个数组 nu…