一、数据类型的分类

在这里插入图片描述


二、数值类型

2.1 整数类型

在这里插入图片描述

操作示例(以tinyint类型为例)

在这里插入图片描述

说明

  1. 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的,类型后跟unsigned表示无符号。
  2. 如果插入的数值越界,MySQL会直接拦截插入操作(不会像C/C++那样做截断处理),以此来保证成功插入的数据都是合法的、完整的。因此MySQL中的数据类型本身也是一种“约束”,这种约束迫使使用者插入合法的数据,保证数据库中的数据是可预期的、完整的。

2.2 bit类型

语法

bit[(M)] : 位字段类型。M表示所占的位数,范围从1到64。如果M被忽略,默认为1。

操作示例

在这里插入图片描述

说明

  1. M表示所占的位数,范围从1到64。如果M被忽略,默认为1。
  2. 如果试图创建大于64位的bit类型,系统将终止操作。
  3. 同整型一样,如果插入的数值越界,系统将拦截插入操作。
  4. 该版本的MySQL会以16进制的方式显示bit类型的数值,有些版本会以assic码的方式显示字符(对于有些数值则无法显示如0/1)。

2.3 浮点类型

2.3.1 float

语法

float[(m, d)] [unsigned] : m指定最大长度,d指定小数位数,占用空间4个字节

说明

  1. float(m, d),整数部分最大m-d位

  2. float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

  3. 如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99(直接舍去负数部分)。

  4. 如果只定义float,不做位数限制,默认保留最高6位3.1415926->3.14159。

  5. float和double类型在表示小数时存在浮点精度误差,float类型能够精确到大约小数点后8位,double类型能够精确到大约小数点后18位。

  6. 关于浮点误差:0.1+0.2≠0.3?? 无可避免的浮点误差_哔哩哔哩_bilibili

  7. double和float用法基本相同,比float精度更大,占用8字节空间。

操作示例

在这里插入图片描述


2.3.2 decimal

语法

decimal[(m, d)] [unsigned] : 定点数m指定长度,d表示小数点的位数

说明

  1. decimal(5,2) 表示的范围是 -999.99 ~ 999.99

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

  3. 如果只定义decimal,不做位数限制,默认(10, 0);

  4. decimal支持的整数最大位数m为65,小数最大位数d为30。

  5. 使用DECIMAL类型(十进制定点数)可以避免浮点运算中的误差,因为它不使用浮点表示(如IEEE 754),而是直接以二进制的形式存储小数。这种表示方法不会产生精度问题,因此可以精确地表示如货币等需要高精度的数值。

操作示例

在这里插入图片描述


三、字符串类型

3.1 char

语法

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

说明

  1. char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255

操作示例

在这里插入图片描述


3.2 varchar

语法

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

说明

char和varchar比较

在这里插入图片描述

  • ‌存储方式‌:

    • CHAR‌:CHAR是固定长度的类型,预分配一个固定的空间来存储字符串。如果存储的字符串长度小于指定的长度,MySQL会用空格填充剩余的空间以达到指定的长度。在检索CHAR值时,末尾的空格会被删除。‌1

    • VARCHAR‌:VARCHAR是可变长度的类型,只占用实际需要的存储空间,外加一个字节或两个字节(取决于字符串长度)来存储字符串的长度信息。如果列的最大长度小于或等于255字节,则使用1个字节来表示长度;如果超过255字节,则使用2个字节。

  • ‌性能差异‌:

    • CHAR:由于长度固定,数据库可以直接根据每个记录的存储长度进行快速定位,因此在某些情况下存储和读取效率较高,尤其是在频繁更新操作时可能会有更好的性能。‌2

    • VARCHAR‌:虽然存储和读取效率稍低,因为它需要处理长度信息,但它在存储空间上更为节省,适合存储长度可变的字符串。

  • ‌使用场景‌:

    • CHAR:适合存储长度固定的字符串,例如国家代码、固定格式的编号等。由于固定长度,CHAR类型在频繁比较和排序的情况下表现更好。‌

    • VARCHAR‌:适合存储长度可变的字符串,例如名字、地址、描述等。由于其灵活性,VARCHAR在存储空间有限的情况下更为适用。

操作示例

在这里插入图片描述

在这里插入图片描述


3.3 enum & set

语法 + 说明

enum:枚举,“单选”类型;

enum('选项1','选项2','选项3',...);
  • 该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;
  • 出于效率考虑,这些值实际存储的是“数字”,因此这些选项依次对应如下数字:1,2,3,…最多65535个;
  • 当我们添加枚举值时,也可以添加对应的数字编号。
  • 对1至255个成员的枚举需要1个字节存储;对于255至65535个成员,需要2个字节存储。最多允许有65535个成员。

set:集合,“多选”类型;

set('选项a','选项b','选项c', ...);  
  • 该设定只是提供了若干个选项的值,最终一个单元格中,可以存储其中任意多个值;
  • 一个集合中的所有选项组成一个位图,其中的每个选项依次对应从低到高的每一位。如1表示’a’,2表示’b’,3表示’a’+‘b’,5表示’a’+‘c’,7表示’a’+‘b’+‘c’。
  • SET类型最多可以设置64个值。存储大小由集合成员的数量决定,最多占用8个字节。对于1到8、9到16、17到24、25到32、33到64个成员的集合,其SET值分别占用1、2、3、4或8个字节‌4。

提示:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。

操作示例

尝试插入未设置的值

在这里插入图片描述

以编号和位图的形式插入

在这里插入图片描述

筛选出:1.所有男生 2.所有喜欢篮球的男生

在这里插入图片描述

提示:

  1. MySQL中的where相当于if,后跟筛选条件。可以用andornot表示条件之间的逻辑关系。
  2. 语句select * from votes where hobby='篮球'查询到的是爱好只有篮球的人。
  3. 集合查询使用函数find_in_set(sub,str_list):如果 substr_list 中,则返回下标;如果不在,返回0;str_list 是用逗号分隔的字符串或是在查表时表中的字段名。

四、日期时间类型

语法

常用的日期类型有如下三个:
date :日期 'yyyy-mm-dd',占用三字节
datetime 日期时间 'yyyy-mm-dd HH:ii:ss',占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节

说明

  1. date和datetime同其他类型数据一样需要使用者手动设置。
  2. 而timestamp类型的数据不需要手动设置,当该条记录创建或修改时,timestamp会自动更新。

操作示例

在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐