【MySQL】MySQL 数据类型

目录

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);

 成功找到了。

写在最后:

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

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

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

猜你喜欢

转载自blog.csdn.net/Locky136/article/details/132135402