mysql的数据类型


数据类型也称为列类型,对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间

SQL数据类型主要有:
数值类型
字符串类型
时间日期类型
具体的分类
在这里插入图片描述
我们先看数值型里的整数型

数值型

整数型

在这里插入图片描述
具体的命令使用

-- 创建一张整型表,注意要先进入一张数据库,才能创建表
-- 比如我们先创建一个mydb_01的数据库
create database mydb_01 charset utf8;
use mydb_01;
-- 接着创建整型表
create table my_int(
int_1 tinyint,
int_2 smallint,
int_3 int,
int_4 bigint
)charset utf8;

-- 插入数据
insert into my_int
values(100,100,100,100);
-- 这种数据是可以的

整数型表限定数据,限定范围

-- 类型的限定
insert into my_int
values('a','b','c','d');
-- 这种数据是无效的,因为不是整型

-- 范围的限定
insert into my_int
values(255100010000001000000000)
-- 这种的数据会超出范围,也是不成功的
-- 给表增加一个无符号类型
alter table my_int add int_5 tinyint unsigned; -- unsigned就表示无符号类型
-- 这个时候查看一下表的结构
desc my_int;

在这里插入图片描述

-- 插入数据
insert into my_int values(127,10000,100000,1000000,255);
-- 查询数据
select * from my_int;

在这里插入图片描述
有符号无符号的选择,像年龄的这种就没有负数,所以一般是选择无符号的
注意上面的上面 那张图

类型后面的数字表示显示长度,这个显示长度不会影响数据的大小

-- 并且显示长度是可以指定的
-- 比如增加一个指定显示长度为1的字段
alter table my_int add int_6 tinyint(1) unsigned;

显示长度的意义在于,如果后面默认的显示长度是3,但是存入的数值却不足3位的时候,我们可以使用0填充,存入的数值超出的话是不管的

-- 创建一个显示长度为3的字段,然后使用0填充
alter table my_int add int_7 tinyint(3) zerofill;
-- 查看表结构
desc my_int;

在这里插入图片描述
可以发现,当使用零填充的时候,这个字段会自动转换成无符号的
这是因为如果是有符号的话,如果是-1的话,前面使用一个零填充就成 0-1,这就不是一个数值了,这就是一个运算。所以要变成无符号的

-- 插入数据
insert into my_int values(1,1,1,1,1,1,1);
-- 然后查看数据
select * from my_int;

在这里插入图片描述
可以发现变成001了
这样就保证了数据的格式
那为什么要保证数据的格式呢?这是因为网页的样式是可以根据内容的长度自动调节的,这样长度一致的话,网页会美观。

小数型

在这里插入图片描述

浮点型

float一般的范围是7位左右
double 的范围是15位左右

-- 浮点数表
create table my_float(
fl float,
f2 float(10,2), -- 第一位数字表示总长度,后面一位表示小数的位数,一般总长度是10的话是在精度范围之外的
f3 float(6,2) -- 因为float精度范围是7位左右,所以6在其内
)charset utf8;

-- 插入数据
insert into my_float values(9999999999,99999999.99,9999.99);
-- 也可以插入科学计数法
insert into my_float values(3e38,3.01e7,1234.45);-- 3e38表示3乘以10的38次方
-- 这些数据都是合法的

浮点型数据的插入,整型部分是不能超出长度的,小数部分可以超出长度,系统会四舍五入,并且整个长度超出(超出精度之外)也会四舍五入

-- 整数部分如果超出长度会直接报错,小数部分则会四舍五入
insert into my_float values (123456,12345.123456,123.123456);

查看值的时候,会发现系统会四舍五入,

在这里插入图片描述

定点型
-- 创建定点数表
create table my_decimal(
fl float(10,2),
d1 decimal(10,2)
)charset utf8;
-- 插入数据
insert into my_decimal value(123456.90,12345678.90);
insert into my_decimal value(1234.129456,1234.129456); -- 小数部分超出

数据虽然插入成功了,但是有一条警告,
在这里插入图片描述
查看警告

-- 查看警告
show warnings;

在这里插入图片描述
虽然警告了,但是他还是会执行
在这里插入图片描述
浮点数超出之后,都会四舍五入
如果是浮点数导致的长度溢出,会四舍五入,但是定点数不会
比如看例子

-- 插入一条溢出的数据
insert into my_decimal values(99999999.99,99999999.99);
insert into my_decimal values(99999999.99,99999999.999);-- 整个超出长度,报错,插入不进去

在这里插入图片描述
定点型整数部分是不会四舍五入,小数部分超出的话也是四舍五入的。
小数部分超出的前提是:整数加小数部分的总长度不能超出
==浮点数如果是因为进位导致的长度溢出,没有问题,但是定点数不行。==还有定点数整个超出的话,是直接插入不进去数据的,直接报错。

还有上面这张图片的第一行的float没有进位的原因是:整数部分不足8位,我设置的是8位整数,没有满,就不进位
所以进位的的一个前提是:整数部分必须填满
举个例子:

insert into my_decimal value(123456.90,12345678.90);

在这里插入图片描述

时间日期的类型

在这里插入图片描述

年份里面的2 和4 表示位数,举个例子,
2020年,如果是2位的话,显示的是后面的两位20,如果是4位的话,就显示的是2020.

在这里插入图片描述
具体的代码例子

-- 创建时间日期的表格
create table my_data(
d1 datetime,
d2 date,
d3 time,
d4 timestamp,
d5 year
)charset utf8;

-- 创建成功之后,查看表结构
desc my_data;

在这里插入图片描述
Null表示值是否可以为空,只有timestamp不可以为空,并且有默认值,也会自动更新

-- 插入数据
insert into my_data values
('2020-06-03 17:14:30','2020-06-03','17:14:30','2020-06-03 17:14:30',2020);

-- 时间可以使用负数,time可以使用负数,对应的值是第三个
insert into my_data values
('2020-06-03 17:14:30','2020-06-03','-217:14:30','2020-06-03 17:14:30',2020);
-- 一天只有24小时,那么-217就表示从过去到现在的时间段



insert into my_data values
('2020-06-03 17:14:30','2020-06-03','-2 17:14:30','2020-06-03 17:14:30',2020);
-- -2表示过去2天,也就是48小时,再加上后面的17,一共就是65小时


--year可以使用两位也可以使用4位
insert into my_data values
('2020-06-03 17:14:30','2020-06-03','17:14:30','2020-06-03 17:14:30',69);

-- 查看数据
select * from my_data;

在这里插入图片描述

-- timestamp 只要你修改东西,他会自动更新
update my_data set d1='2020-02-12  11:12:11' where d5='2069';
-- 也就是说当你修改东西的时候,它会自动更新你的修改时间

在这里插入图片描述

-- 也可以通过函数获取时间戳(也就是当前时间)
select unix_timestamp();
-- 获取到的值想怎么格式化都可以,取决于自己

在这里插入图片描述

字符串类型

在这里插入图片描述

在这里插入图片描述
定长的磁盘浪费,但是效率高
变长的磁盘节省,但是效率低
在这里插入图片描述
图片、视屏就是二进制的数据,用blob
虽然数据库可以存这些东西,但是我们一般不用这种方式,我们一般把这些视屏之类的东西存在磁盘上,然后数据库里面只要保存一下路径就可以了。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值