0


3.mysql基本数据类型

文章目录

mysql基本数据类型

数值类型

tinyint[unsigned] 占1个字节,带符号的范围为-128~127,服务号范围为0~255,默认有符号
smallint[unsigned] 占2个字节,带符号范围为-2^15~2^15-1,无符号为2^16-1
int[unsigned] 占4个字节,带符号范围为-2^31~2^31-1,服务号是2^32-1
bigint[unsigned] 占8个字节,带符号范围为-2^63~2^63-1,无符号为2^64-1

数值类型基本与c/c++里面的数值类型是一样的,但是要是出现数据越界的情况会直接进行报错不容许进行插入

当我们插入数据的时候,因为数据类型本身有自己的取值范围,Mysql此时不容许我们进行插入

mysql对于数据的存储,本身有更加严格的约束

mysql数据类型本身就是一种约束

bit类型

bit[M]:m代表当前值有多少位,范围为1到64,忽略默认为1

例如:

createtable t3(
    name varchar(20),
    gender bit(1)comment'::男,1::女';
);

注意事项:

bit字段在显示的时候,是按照ASCII码对应的值进行现实的

浮点数

float
float:
float[(m,d)][nusigned]:M指显示长度,d指定小数位数,占用4个字节
例如:
float(4,2)表示4伟长度,2位小数,-99.99~99.99
若插入长度位于整个区间内,它容许进行插入,但是会进行四舍五入,例如99.991插入后变成99.9999.995插入就不行
所以上面的插入范围变成-99.994~99.994floatunsigned(4,2)的范围就变成了0~99.99,不会像整数一样增加范围了
decimal
与float用法一样
但是精确度不一样,精确度更高
decimal最大得位数为65,支持小数最大位数d为30

字符类型

char
char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度为255
固定长度的字符串,长度本身也是一种约束
固定的意思是按照规定的长度直接开辟好空间用来使用
varchar
varchar(L),可变长度的字符串,变长上限
在utf8中一个字符占3字节,最大为21845
gbk中一个字符占2字节,最大为32766varchar(6)表示可以存放6个字符
边长字符串是指在规定的L范围内会根据你所使用的多少进行开辟,不能超过L这个范围

超过都会报错

mysql限定“字符”的感念不是字节,有一个非常大的好处,就是让用户不在关心复杂的编码细节了

image-20220415170525146

如何选择定长或变长字符串?

如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5

如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。

定长的磁盘空间比较浪费,但是效率高。

变长的磁盘空间比较节省,但是效率低。

定长的意义是,直接开辟好对应的空间

变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

日期和时间类型

date:日期’yyyy-mm-dd’,占用三个字节

datatime:时间日期格式’yyyy-mm-dd HH:ii:ss’,占8字节

timestamp:时间戳,每次更新时会自动进行时间戳的更新,占用4字节

enum和set

enum

enum(只能多选一,而且插入的数据字段必须在enum中),可以采用数字的方案,1,2,3,4.。可>以看作数组的起始下标

createtable t4(name char(6), sex enum('男','女'));

插入时性别那一栏只可以填男或者女(或者其对应的小标1,2),填其它数值都会报错

mysql>insertinto t4 values('张三','男');
Query OK,1row affected (0.00 sec)

mysql>insertinto t4 values('张三','l');
ERROR 1265(01000): Data truncated forcolumn'sex' at row1

mysql>insertinto t4 values('李四','女');
Query OK,1row affected (0.01 sec)

mysql>insertinto t4 values('hello',1);
Query OK,1row affected (0.00 sec)

mysql>insertinto t4 values('hello',0);
ERROR 1265(01000): Data truncated forcolumn'sex' at row1
mysql>insertinto t4 values('hello',2);
Query OK,1row affected (0.00 sec)

mysql>insertinto t4 values('hello',3);
ERROR 1265(01000): Data truncated forcolumn'sex' at row1
如上面所示,当我们sex一栏插入男或者女,或者其对应的1或者2时都没有问题,但是插入其它内容时就会报错

image-20220415172509362

set
set('选项1','选项2','选项3');

set中的选项可以多选1,而且插入的字段,必须再set中出现,

当我们使用数字插入set的元素的时候,不是数组下标,而可以看作比特位,例如上面三个选项,>>选项1用一个比特位表示,选项2也用一个比特位表示,选项三也用一个比特位表示,这几个比特>位初始化为0,当使用这个选项的时候将这个比特位置为1

选项1      选项2      选项3101
使用一     不使用2     使用3
那么101三个比特位构成数字5,当我们输入数字5个时候就代表选项1和选项3被选择了

例如:

createtable t5(name char(5),hoppy set('篮球','足球','羽毛球'));
mysql>insertinto t5 values('张三',5);
Query OK,1row affected (0.01 sec)

mysql>select*from t5;+--------+------------------+| name   | hoppy            |+--------+------------------+| 张三   | 篮球,羽毛球       |+--------+------------------+1rowinset(0.00 sec)

如上所以,说如5就将这两个选项填入表格了

普通插入

ysql>insertinto t5 values('张三','篮球,足球');
Query OK,1row affected (0.01 sec)

mysql>select*from t5;+--------+------------------+| name   | hoppy            |+--------+------------------+| 张三   | 篮球,羽毛球      || 张三   | 篮球,足球        |+--------+------------------+2rowsinset(0.00 sec)

image-20220415173932481

不满足sql语句被终止,这也是一种约束

集合查询使用find_in_set函数

find_in_set(sub,str_list):

select find_in_set('a','a,b,b');//查看a是否在’a,b,b‘这个集合中
select*from t5 where hobby='篮球';//筛选爱好是篮球,严格匹配
mysql>select*from t5 where hoppy='篮球';+--------+--------+| name   | hoppy  |+--------+--------+| 李四   | 篮球   |+--------+--------+1rowinset(0.00 sec)select*from votes where find_in_set('登山',hoppy);//筛选爱好中有篮球的人

mysql>select*from t5 where find_in_set('篮球',hoppy);+--------+------------------+| name   | hoppy            |+--------+------------------+| 张三   | 篮球,羽毛球       || 张三   | 篮球,足球         || 李四   | 篮球             |+--------+------------------+3rowsinset(0.00 sec)

ect *from t5 where find_in_set('篮球',hoppy);+--------+------------------+| name   | hoppy            |+--------+------------------+| 张三   | 篮球,羽毛球       || 张三   | 篮球,足球         || 李四   | 篮球             |+--------+------------------+3rowsinset(0.00 sec)

本文转载自: https://blog.csdn.net/weixin_51476766/article/details/124200548
版权归原作者  落禅 所有, 如有侵权,请联系我们删除。

“3.mysql基本数据类型”的评论:

还没有评论