3.mysql基本数据类型

Posted  落禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

例如:

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

注意事项:

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

浮点数

float
floatfloat[(m,d)] [nusigned]:M指显示长度,d指定小数位数,占用4个字节
例如:
float(4,2)表示4伟长度,2位小数,-99.99~99.99
若插入长度位于整个区间内,它容许进行插入,但是会进行四舍五入,例如99.991插入后变成99.99
99.995插入就不行
所以上面的插入范围变成-99.994~99.994

float unsigned(4,2)的范围就变成了0~99.99,不会像整数一样增加范围了
decimal
float用法一样
但是精确度不一样,精确度更高
decimal最大得位数为65,支持小数最大位数d为30

字符类型

char
char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度为255
固定长度的字符串,长度本身也是一种约束
固定的意思是按照规定的长度直接开辟好空间用来使用
varchar
varchar(L),可变长度的字符串,变长上限
在utf8中一个字符占3字节,最大为21845
gbk中一个字符占2字节,最大为32766

varchar(6)表示可以存放6个字符
边长字符串是指在规定的L范围内会根据你所使用的多少进行开辟,不能超过L这个范围

超过都会报错

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

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

如果数据确定长度都一样,就使用定长(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.。可>以看作数组的起始下标

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

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

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


mysql> insert into t4 values('张三','l');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1

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


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

mysql> insert into t4 values('hello',0);
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql> insert into t4 values('hello',2);
Query OK, 1 row affected (0.00 sec)

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

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

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

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

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

例如:

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

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

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

普通插入

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

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

不满足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  |
+--------+--------+
| 李四   | 篮球   |
+--------+--------+
1 row in set (0.00 sec)






select *from votes where find_in_set('登山',hoppy);
//筛选爱好中有篮球的人

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


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

以上是关于3.mysql基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章

3.mysql基本数据类型

3.mysql基本数据类型

3.mysql基本数据类型

程序的砖瓦------变量与数据类型(06)

通用型动态数组的总结

浅谈js中的深拷贝和浅拷贝