【MySQL笔记】数据类型

🔥个人主页🔥:孤寂大仙V
🌈收录专栏🌈:MySQL
🌹往期回顾🌹:【MySQL笔记】库操作与表操作
🔖流水不争,争的是滔滔不


  • 一、数据类型分类
  • 二、tinyint类型
  • 三、bit和int类型
  • 四、小数类型
    • float
    • decima
  • 五、字符串类型
    • char类型
    • varchar类型
    • 日期类型和时间类型
  • 六、enum和set

一、数据类型分类

在这里插入图片描述

二、tinyint类型

无符号类型
无符号类型范围是0-255

以下演示创建的表全在test2库中,tinyint类型表名称为t1。
在这里插入图片描述
在这里插入图片描述

以下示例是在无符号类型的情况下进程插入,插入范围在0-255都没有问题

insert into t1 values(1); //向表中插入数据
insert into t1 values(255);
select * from t1; //查看表内容

在这里插入图片描述

以下示例是插入不合法示例

insert into t1 values(-1);insert into t1 values(256);

在这里插入图片描述


带符号类型

带符号类型方位是-128 ~ 127

以下演示创建的表全在test2库中,tinyint类型,表名称为t2。
在这里插入图片描述
以下示例是在带符号类型的情况下进程插入,插入范围在-128~127都没有问题

mysql> insert into t2 values(-128); //在范围内mysql> insert into t2 values(127);
mysql> insert into t2 values(-129); //不在范围内
ERROR 1264 (22003): Out of range value for column 'num' at row 1
mysql> insert into t2 values(128);
ERROR 1264 (22003): Out of range value for column 'num' at row 1

在这里插入图片描述
注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不
下,与其如此,还不如设计时,将int类型提升为bigint类型。

三、bit和int类型

bit(M)是位类型,M指定位数,默认值是1,范围是1-64。
int类型,带符号是-2的31次方到2的31次方-1,无符号是2的16次方-1。

以下示例是在t3表下完成。
在这里插入图片描述

向表内插入数据

mysql> insert into t3 (id,online) values (128,0);
Query OK, 1 row affected (0.01 sec)mysql> insert into t3 (id,online) values (129,1);
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
发现online这一列不是所插入的对应的数据,而是ascll码值。

select id,hex(online) from t3;//通过这种方式显示数据

在这里插入图片描述
int没什么好说的正常使用就可以了

四、小数类型

float

有符号类型

语法: float[(m, d)] : M指定显示长度,d指定小数位数,占用空间4个字节

在这里插入图片描述
以下是在t4表下进行演示

mysql> insert into t4 (id,salary) values (128,20.76); //向表中插入数据
Query OK, 1 row affected (0.02 sec)mysql> insert into t4 (id,salary) values (91,99.99);
Query OK, 1 row affected (0.01 sec)mysql> insert into t4 (id,salary) values (21,-99.99);
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
MySQL在保存值时会进行四舍五入。

mysql> insert into t4 (id,salary) values (11,9.213);
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述

mysql> insert into t4 (id,salary) values (22,9.218);
Query OK, 1 row affected (0.01 sec)

在这里插入图片描述


无符号类型
如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99。

以下演示是在t5表内
在这里插入图片描述

在这里插入图片描述

decima

语法:decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数。
decimal和float很像,但是有区别: float和decimal表示的精度不一样

比如:

decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99

以下演示在t6中进行操作
在这里插入图片描述

mysql> insert into t6 (f1,f2) values (23.46523451,24.38);
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述

我们发现,float类型的f1精度不准后几位不正确,f2不会发生进位的情况。


在这里插入图片描述
我们改下decimal类型的小数个数
在这里插入图片描述
发现decimal的精度更准确,因此如果我们希望某个数据表示高精度,选择decimal。
说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,
默认是10。

无符号类型只是正负的差异,不做过多演示

五、字符串类型

char类型

语法:char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。

以下演示在t7表中进行操作

在这里插入图片描述
插入数据

mysql> insert into t7 (id,name) values (1,a);
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
mysql> insert into t7 (id,name) values (1,'a');
Query OK, 1 row affected (0.00 sec)mysql> insert into t7 (id,name) values (1,'b');
Query OK, 1 row affected (0.00 sec)mysql> insert into t7 (id,name) values (1,'ab');
Query OK, 1 row affected (0.01 sec)mysql> insert into t7 (id,name) values (1,'abc');
ERROR 1406 (22001): Data too long for column 'name' at row 1

在这里插入图片描述
发现abc超过三个字符插入不了


下面插入中国汉字

mysql> ^C
mysql> insert into t7 (id,name) values (2,'中');
Query OK, 1 row affected (0.01 sec)mysql> insert into t7 (id,name) values (2,'中国');
Query OK, 1 row affected (0.01 sec)mysql> insert into t7 (id,name) values (2,'中国人');
ERROR 1406 (22001): Data too long for column 'name' at row 1

在这里插入图片描述
在mysql中一个中国汉字可以当作一个char

varchar类型

语法:varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

以下演示在t8表中进行操作

在这里插入图片描述

mysql> insert into t8 (id,name) values (1,'中国人民万岁');
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述

当我们修改varchar长度的时候发现最大长度是16383,但是上面不是说过最大时65535吗?
上面说的时65535个字节不是字符

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字
节数是65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占
用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符
占用2字节)。

char和var的比较
在这里插入图片描述
在这里插入图片描述

  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
  • 如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。
  • 定长的意义是,直接开辟好对应的空间
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

日期类型和时间类型

常用的日期有如下三个:

  • date :日期 ‘yyyy-mm-dd’ ,占用三字节
  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节
  • timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用
    四字节

以下演示在t9表中进行操作
在这里插入图片描述

insert into t9 (data,datetime) values ('2000-10-01','1949-10-01 08:00:00');

在这里插入图片描述

六、enum和set

语法:
enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考
虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535
个;当我们添加枚举值时,也可以添加对应的数字编号。

set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字1,2,4,8,16,32,… 最多64个。

以下演示在t10表中进行
在这里插入图片描述

mysql> insert into t10 (username,gender,bobby) values('张三','男','代码');
Query OK, 1 row affected (0.01 sec)mysql> insert into t10 (username,gender,bobby) values('李四','女','代码');
Query OK, 1 row affected (0.00 sec)mysql> insert into t10 (username,gender,bobby) values('王五',1,'代码');
Query OK, 1 row affected (0.00 sec)mysql> insert into t10 (username,gender,bobby) values('赵六',2,'代码');
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
枚举类型 gender只能插入里面有的,比如上图只能插入男或者女。也可以写常量的下标,下标从1开始。


mysql> insert into t10 (username,gender,bobby) values('小帅',1,'代码,蓝球,羽毛球');
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述
集合中不可以插入,集合中不存在的类型。可以多个插入也可以单个插入。


查询性别位女的人

select * from t10 where gender =2;

在这里插入图片描述
严格筛选
比如就要有只有代码和羽毛球的

mysql> select * from t10  where bobby='代码,羽毛球';

在这里插入图片描述
要想查询所有喜欢羽毛球的怎么操作呢?

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

先讲一下这个函数
在这里插入图片描述
在a,b,c中找a找到了,在返回a的小标。找d不在,返回0。

mysql> select * from t10 where find_in_set('羽毛球',bobby);

在这里插入图片描述
这样就把包含羽毛球的筛选出来了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 记忆链表,LinkedList 的升级版

文章目录 记忆链表 MemoryLinkedList实战源代码 众所周知,ArrayList 和 LinkedList 是 Java 集合中两个基本的数据结构,对应数据结构理论中的数组和链表。但在这两个数据结构,开发者们通常使用 ArrayList,而不使用 LinkedList。JD…

【数据分享】2000—2024年我国省市县三级逐年归一化植被指数(NDVI)数据(年平均值/Shp/Excel格式)

之前我们分享过2000-2024年我国逐年的归一化植被指数(NDVI)栅格数据,该逐年数据是取的当年月归一化植被指数(NDVI)的年平均值。!该数据来源于NASA定期发布的MOD13A3数据集!很多小伙伴拿到数据后…

MySQL索引

目录 索引的引入 再次理解MySQL数据操作 索引 页内目录 页间目录 索引结构为什么要采用B树? 聚簇索引和非聚簇索引 聚簇索引 非聚簇索引 主键索引和非主键索引 索引相关操作 创建主键索引 创建唯一键索引 创建普通索引 查询索引 删除索引 索…

数据分析面试--京东

1.考察日期函数的应用 select Order_date, count(distinct user_id) as uv from (select user_id, Order_date, row_number() over(partition by user_id order by Order_date) as new_tagfrom ord where date_diff(current_date(), Order_date)<30 ) t where new_tag1 gro…

从零到一开发一款 DeepSeek 聊天机器人

AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人&#xff0c;旨在为用户提供自然、流畅的对话体验。通过…

常见中间件漏洞攻略-Jboss篇

一、CVE-2015-7501-Jboss JMXInvokerServlet 反序列化漏洞 第一步&#xff1a;开启靶场 第二步&#xff1a;访问该接口&#xff0c;发现直接下载&#xff0c;说明接⼝开放&#xff0c;此接⼝存在反序列化漏洞 http://47.103.81.25:8080/invoker/JMXInvokerServlet 第三步&…

题解:AT_abc170_f [ABC170F] Pond Skater

题目描述 アメンボのすぬけ君は南北 H マス東西 W マスの長方形の形をしたグリッド状の池に住んでいます。北から i 番目、西から j 番目のマスをマス (i,j) とします。 いくつかのマスには蓮の葉が浮かんでおり、すぬけ君はそれらのマスには入ることができません。 cij​ が…

Kafka日志管理系统深度解析

Kafka日志管理系统深度解析 在分布式消息队列领域&#xff0c;Kafka因其高性能、可扩展性和可靠性而广受欢迎。而日志管理系统是Kafka的核心基础设施&#xff0c;它直接决定了Kafka的性能表现和可靠性保证。 分段式存储设计 Kafka采用分段式存储设计&#xff0c;将每个分区的…

DeepSeek、Grok 与 ChatGPT 4.5:新一代大模型架构与推理能力深度解析

近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;领域发展迅猛&#xff0c;DeepSeek、Grok 以及 OpenAI 最新发布的 ChatGPT 4.5 都是该领域的代表性产品。本文将从架构设计、推理能力、训练策略等方面&#xff0c;对三者进行技术对比&#xff0c;探讨其优势与潜在的应…

Oracle数据库性能优化全攻略:十大关键方向深度解析与实践指南

文章目录 一、SQL查询优化二、索引优化三、内存管理四、I/O优化五、分区表与分区索引六、并行处理七、统计信息管理八、锁与并发控制九、数据库参数调优十、应用设计优化结论 在当今数据驱动的时代&#xff0c;数据库的性能优化成为了确保企业应用高效运行的关键。Oracle作为业…

Git 使用SSH登陆

一、SSH介绍 SSH连接相比于HTTP连接会简单一点&#xff0c;因为SSH连接通过了私钥与公钥进行身份认证&#xff0c;这样就不需要像HTTP一样&#xff0c;每次clone或者操作仓库都需要输入密码 其中私钥和密钥是需要在自己电脑上生成的&#xff0c;通过命令即可生成一个私钥和一个…

openharmony中hilog实证记录说明(3.1和5.0版本)

每次用这个工具hilog都有一些小用法记不清&#xff0c;需要花一些时间去查去分析使用方法&#xff0c;为了给丰富多彩的生活留出更多的时间&#xff0c;所以汇总整理共享来了&#xff0c;它来了它来了~~~~~~~~~ 开始是想通过3.1来汇总的&#xff0c;但实际测试发现openharmony…

UDP 协议

文章目录 UDP 协议简介数据包格式UDP 通信流程抓包分析参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均附有参考链接&#xff0c;如侵权&#xff0c;请联系删除。 UDP 协议 UDP 是一种面向无连接的传输层协议&#xff0c;属于 TCP/IP 协议簇的一种。…

数据结构之链表(双链表)

目录 一、双向带头循环链表 概念 二、哨兵位的头节点 优点&#xff1a; 头节点的初始化 三、带头双向链表的实现 1.双链表的销毁 2.双链表的打印 3.双链表的尾插和头插 尾插&#xff1a; 头插&#xff1a; 4.双链表的尾删和头删 尾删&#xff1a; 头删&#xff1a; …

内存取证之windows-Volatility 3

一&#xff0c;Volatility 3下载 1.安装Volatility 3。 要求&#xff1a;python3.7以上的版本&#xff0c;我的是3,11&#xff0c;这里不说python的安装方法 使用 pip 安装 Volatility 3&#xff1a; pip install volatility3 安装完成后&#xff0c;验证安装&#xff1a; v…

Unity的JSON工具类+LitJson的引入及使用

C#使用JSON数据 数据存储&#xff08;序列化&#xff09;&#xff1a;将C#的数据格式&#xff0c;转化为JSON字符串&#xff0c;存储或传输 数据使用&#xff08;反序列化&#xff09;&#xff1a;将JSON字符串中存储的数据&#xff0c;转化为C#可用的数据格式&#xff0c;实现…

WX小程序

下载 package com.sky.utils;import com.alibaba.fastjson.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.Cl…

MyBatis 中 #{} 和 ${} 的区别详解

目录 1. #{} 和 ${} 的基本概念 1.1 #{} 1.2 ${} 2. #{} 和 ${} 的工作原理 2.1 #{} 的工作原理 2.2 ${} 的工作原理 3.共同点&#xff1a;动态 SQL 查询 4. 区别&#xff1a;处理方式和适用场景 4.1 处理方式 4.2 适用场景 &#xff08;1&#xff09;#{} 的适用场景…

【蓝桥杯速成】| 10.回溯切割

前面两篇内容我们都是在做有关回溯问题的组合应用 今天的题目主题是&#xff1a;回溯法在切割问题的应用 题目一&#xff1a;分割回文串 问题描述 131. 分割回文串 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s&#xff0c;请你将 s 分割成一些 子串&#xff…

数据结构之双向链表-初始化链表-头插法-遍历链表-获取尾部结点-尾插法-指定位置插入-删除节点-释放链表——完整代码

数据结构之双向链表-初始化链表-头插法-遍历链表-获取尾部结点-尾插法-指定位置插入-删除节点-释放链表——完整代码 #include <stdio.h> #include <stdlib.h>typedef int ElemType;typedef struct node{ElemType data;struct node *next, *prev; }Node;//初化链表…