0


3.mysql基本数据类型

文章目录

mysql基本数据类型

数值类型

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

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

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

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

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

bit类型

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

例如:

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

注意事项:

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

浮点数

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

字符类型

char
  1. char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度为255
  2. 固定长度的字符串,长度本身也是一种约束
  3. 固定的意思是按照规定的长度直接开辟好空间用来使用
varchar
  1. varchar(L),可变长度的字符串,变长上限
  2. utf8中一个字符占3字节,最大为21845
  3. gbk中一个字符占2字节,最大为32766varchar(6)表示可以存放6个字符
  4. 边长字符串是指在规定的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.。可>以看作数组的起始下标

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

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

  1. mysql>insertinto t4 values('张三','男');
  2. Query OK,1row affected (0.00 sec)
  3. mysql>insertinto t4 values('张三','l');
  4. ERROR 1265(01000): Data truncated forcolumn'sex' at row1
  5. mysql>insertinto t4 values('李四','女');
  6. Query OK,1row affected (0.01 sec)
  7. mysql>insertinto t4 values('hello',1);
  8. Query OK,1row affected (0.00 sec)
  9. mysql>insertinto t4 values('hello',0);
  10. ERROR 1265(01000): Data truncated forcolumn'sex' at row1
  11. mysql>insertinto t4 values('hello',2);
  12. Query OK,1row affected (0.00 sec)
  13. mysql>insertinto t4 values('hello',3);
  14. ERROR 1265(01000): Data truncated forcolumn'sex' at row1
  15. 如上面所示,当我们sex一栏插入男或者女,或者其对应的1或者2时都没有问题,但是插入其它内容时就会报错

image-20220415172509362

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

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

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

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

例如:

  1. createtable t5(name char(5),hoppy set('篮球','足球','羽毛球'));
  1. mysql>insertinto t5 values('张三',5);
  2. Query OK,1row affected (0.01 sec)
  3. mysql>select*from t5;+--------+------------------+| name | hoppy |+--------+------------------+| 张三 | 篮球,羽毛球 |+--------+------------------+1rowinset(0.00 sec)
  4. 如上所以,说如5就将这两个选项填入表格了

普通插入

  1. ysql>insertinto t5 values('张三','篮球,足球');
  2. Query OK,1row affected (0.01 sec)
  3. mysql>select*from t5;+--------+------------------+| name | hoppy |+--------+------------------+| 张三 | 篮球,羽毛球 || 张三 | 篮球,足球 |+--------+------------------+2rowsinset(0.00 sec)

image-20220415173932481

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

集合查询使用find_in_set函数

find_in_set(sub,str_list):

  1. select find_in_set('a','a,b,b');//查看a是否在’a,b,b‘这个集合中
  1. select*from t5 where hobby='篮球';//筛选爱好是篮球,严格匹配
  2. mysql>select*from t5 where hoppy='篮球';+--------+--------+| name | hoppy |+--------+--------+| 李四 | 篮球 |+--------+--------+1rowinset(0.00 sec)select*from votes where find_in_set('登山',hoppy);//筛选爱好中有篮球的人
  3. mysql>select*from t5 where find_in_set('篮球',hoppy);+--------+------------------+| name | hoppy |+--------+------------------+| 张三 | 篮球,羽毛球 || 张三 | 篮球,足球 || 李四 | 篮球 |+--------+------------------+3rowsinset(0.00 sec)
  4. 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基本数据类型”的评论:

还没有评论