【MySQL】2025年带你玩转数据库-进阶篇之数据类型

写在前面

各位彦祖亦菲,可以给我点赞收藏关注嘛!!感激不尽

数据类型

整型:

分类
类型 字节数 有符号(默认)范围 无符号(UNSIGNED)范围
TINYINT 1 字节 -128 到 127 0 到 255
SMALLINT 2 字节 -32,768 到 32,767 0 到 65,535
MEDIUMINT 3 字节 -8,388,608 到 8,388,607 0 到 16,777,215
INTINTEGER 4 字节 -2,147,483,648 到 2,147,483,647 0 到 4,294,967,295
BIGINT 8 字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0 到 18,446,744,073,709,551,615
int(n)
  • 在MySQL 8.0 已弃用,int(n)=int
  • 可以使用int(n) zerofill,这样是显示n位,不足的用0在前面补,超过了就正常显示原数
int(n) zerofill;
无符号类型怎么定义
  • 类型后面加unsigned
 unsigend;

浮点型

double,float,decimal
类型 名称 字节数 精度范围(大致) 精度控制
FLOAT(M, D) 单精度浮点数 4 字节 ~ ±3.4E38 精度较低
DOUBLE(M, D)REAL 双精度浮点数 8 字节 ~ ±1.8E308 精度高
DECIMAL(M, D)NUMERIC 高精度定点数 按精度存储 范围由 M 控制 精度最高(不丢失)
创建
  • 注意,M是总位数,及小数位数加上整数位数
  • D是小数位数
  • 所以整数最大位数是M-D,当赋值的时候超过了,在严格检查模式下会报错,不在,则会警告,且输入不是想要的结果
  • 小数位数随便多少都可以,但是会四舍五入成你想要的位数
  • float和double中在取多位小数的时候,会出现精度丢失的情况
  • 与语言类程序一样,在有高精度的字段中,不要用float和double
  • 高精度字段用decimal
alter table <表名> add <字段名> double(M,D);
alter table <表名> add <字段名> float(M,D);
alter table <表名> add <字段名> decimal(M, D);

字符型

类型 最大长度 字符集依赖 存储方式 适用场景 备注
CHAR(M) 255 字符 取决于字符集 定长,填充空格 长度固定的字符串,如性别(M/F)、国家代码等 固定长度,不节省空间
VARCHAR(M) 65,535 字节 取决于字符集 变长,存储实际字符 可变长度字符串,如用户名、电子邮件等 节省空间,但处理较慢
TEXT 65,535 字符 取决于字符集 变长,不定长 长文本数据,如文章内容、评论等 存储大文本,长度较长时使用
TINYTEXT 255 字符 取决于字符集 变长,不定长 小段文本,如评论摘要等 TEXT 小,适合短文本
MEDIUMTEXT 16,777,215 字符 取决于字符集 变长,不定长 中等长度文本,如大段描述等 TEXT 大,适合中等文本
LONGTEXT 4,294,967,295 字符 取决于字符集 变长,不定长 超大文本数据,如文章、文件内容等 存储非常大的文本,适合文章、日志等

布尔类型

  • boolean
alter table <表名> add <字段名> boolean;

枚举类型(取一个)

  • 只能取该类型中的一个,不能取额外的,取额外的会报错
  • 枚举类型存储时是整数,也就是说,你在插入数据的时候用整数插入,也能插入你对应的字符串
  • 但是注意下标是从1开始的,如下面的的values1是1所对应的值,后面的依次对应
create table  (
  <字段名> enum('value1', 'value2', 'value3', ...) 
);

set类型(取多个)

创建
create table  (
  <字段名> set('value1', 'value2', 'value3', ...) 
);
插入
  • 注意,在一个‘’里逗号隔开,而不是在多个‘’里在外面逗号隔开
    正确的如下:
insert into <表名>(...) values(=='value1,value2'==)

错误的如下

insert into <表名>(...) values(=='value1'==, =='value2'==)

日期类型

类型 格式 范围 精度支持 常用场景
DATE 'YYYY-MM-DD' 1000-01-01 到 9999-12-31 出生日期、节假日等
DATETIME 'YYYY-MM-DD HH:MM:SS' 1000-01-01 00:00:00 到 9999-12-31 23:59:59 秒(支持到微秒) 注册时间、下单时间
TIMESTAMP 'YYYY-MM-DD HH:MM:SS' 1970-01-01 00:00:01 到 2038-01-19 秒(支持到微秒) 自动记录创建/更新时间
TIME 'HH:MM:SS' -838:59:59 到 838:59:59 秒(支持到微秒) 上班时间、倒计时
YEAR 'YYYY' 1901 到 2155 出厂年份、毕业年份
创建
create table <表名> (
  <字段名> <日期类型>
);
赋值
  • 具体赋值跟着具体类型的格式给就行
  • 一般不会手动创建,一般都是自动生成的

你可能感兴趣的:(mysql,数据库,mysql,面试)