小白终是踏上了这条不归路----小文的mysql学习笔记(15)----常见的数据类型

**
小白终是踏上了这条不归路----小文的mysql学习笔记(1)

小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询

小白终是踏上了这条不归路----小文的mysql学习笔记(3)----排序询查

小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数

小白终是踏上了这条不归路----小文的mysql学习笔记(5)----分组查询


小白终是踏上了这条不归路----小文的mysql学习笔记(目录)
**
突然不小心就断更两天,课有点多,【狗头保命】,前面我们在创建表的时候不是在写了表的列名之后要加上表的列类型嘛,那今天我们来学习mysql中的数据类型,看看小文的笔记
**

常见的数据类型

数值型:         整型,
                     小数:    定点数
                                    浮点数
字符型: .
            较短的文本: char、 varchar
            较长的文本: text、 blob (较长的二进制数据)
日期型:

选取什么类型的原则:
所选择的类型越简单越好,能保存数值的类型越小越好。

一、整型

字节 整型 范围
1 Tinyint 有符号:-128~127;无符号: 0~255
2 Smallint 有符号:-32768~32767;无符号: 0~65535
3 Mediumint 有符号: -8388608~8388607;无符号: 0~1677215
4 Int / interger                                    有符号: - 2147483648 2147483647 ;                                                 &无符号: 0~4294967295
5 Bigint    有符号:-92233720368547 75808~92233720368547 75807;                                         无符号: 0~9223372036854775807*2+1

注意事项
①如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
②如果插入的数值超出了整型的范围,会报警告(8.0版本sqlyog),无法插入数据
③如果不设置长度,会有默认的长度

那么我们来演示一下举个栗子:首先我们创一个表tx然后我们顺便看一下它的结构
在这里插入图片描述
不设置默认是有符号的所以你可以插入负数,所以这里可以看到你是插入成功了的
在这里插入图片描述
那么如果要设置无符号的话就需要在建表的时候添加 unsigned 关键字,举个栗子:先把刚刚建的表删了我们再重新建 tx 表 ,插入t1,t2 两列 并查看表结构
在这里插入图片描述
然后我们先来插入t1 一个负数,t2一个正数成功了
在这里插入图片描述
但是当我们像t2插入负数时却报错了,因为我们在设置列类型时加上了 unsigend,将该列设置为了无符号,所以不能插入负数,
在这里插入图片描述

二、小数

一共有两类一类是浮点型,一类是定点型

浮点数类型 范围 字节
float 士1.75494351E 38~士3.402823466E+38 4
double 士2.2250738585072014E-308~士1.7976931348623157E+308 8
定点数类型 范围 字节
DEC(M,D)/DECIMAL(M,D)                最大取值范围与double相同,给定decimal的有效职值范围由M和D决定 M+2

释一下M和D的意思:
D代表小数的位数,如果多了便会四舍五入保留D位小数,如果少了不够D位那么会自动用0来填充
M代表整数和小数一共加起来的位数,不能超过M(小文的是8.0当你超过M位数时是不会插入临界值,当然也不会插入数据)

(M,D) 可以省略,如果是floatdouble则会根据插入的数值的位数来确定位数;
如果是 DECIMAL M默认是10,D默认是0。
定点型的精确度较高,如果要求插入数值的精度较高如货币运算等就考虑使用.

那么我们来举个栗子:咱们先把上面建的fpx表删了,然后重新建一个fpx表,不设置(M,D)将他们省略
在这里插入图片描述
然后我们来看看表结构你可以发现设置declmalx3 的长度默认是(10,0)
在这里插入图片描述
然后我们来插入三个数据会发现 x3 出现警告,然后我们查看表中数据会发现设置了declmal的x3列中的数据被四舍五入保留整数了
在这里插入图片描述

三、字符型

较短的文本:charvarchar

类型 范围 最多字符数
char(M) M为0~ 255之间的整数 M
varchar(M) M为0~65535之间的整数 M

二者的区别:
char(M) 是固定长度的字符,M可以省略默认为一,虽然比较占空间,但是效率较高;
varchar(M) 是可变长度的字符,M不可以省略,相比于char 更节省空间,但是效率相对较低。

解释:

这里char的固定长度字符的意思就是:加入你设置了char(6);然后你插入的数据只要两个字符“aa”但是她是固定长度字符,所以系统还是会给你开六个的字符位置 ; 而varchar(M)是可变长度字符,M是它的最大字符数,只要在M内,你插入几个字符,那系统就给你开几个字符的位置,

补充

1、binaryvarbinary类型(用于保存较短的二进制)
说明: 类似于char和varchar,不同的是它们包含二进制字符串而不包含非二进制字符串。

2、Enum类型,
说明:又称为枚举类型,要求插入的值必须属于列表中指定的值之一。(不区分大小写)

这里我们举个栗子:我们先创建一个tgp表,
在这里插入图片描述
然后再分别插入三个数据 a B M
在这里插入图片描述
然后我们查询表中数据你会发现,只有属于列表中的数据被插入了,而不符合列表的数据M是没有被插入表中而是报错。
在这里插入图片描述

3、Set类型(用于保存集合)
说明:和Enum类型类似,里面可以保存0~64个成员。和Enum类型最大的区
别是: SET类型一次可以选取多个成员,而Enum只能选一个
根据成员个数不同,存储所占的字节也不同(和enum一样不会区分大小写)
成员数          字节数
1~8                    1
9~16                  2
17~24                3
25~32                4
33~64                8

那么我们同样来举个栗子:我们想建一个ig表
在这里插入图片描述
然后向里面插入数据 可以看出,用set可以同时插入多个列表中的数据,而上面的enum型不同,enum这样会报错只能单个插入
在这里插入图片描述

四、日期型

日期和日期类型 字节 最小值 最大值
date 4 1000-01-01 9999-1231
datetime 8 1000-01-01 00:00:00 9999-12 -31 23: 59:59
timestamp 4 1 9700101 080001 2038年的某个时刻
time 3 -838 :59:59 838: 59:59
year 1 1901 2155

date只保存日期
time 只保存时间
year只保存年
datetime保存日期+时间(不受时区影响)
timestamp保存日期+时间(受时区影响)

Timestampdatetime区别:
1、Timestamp支 持的时间范围较小,取值范围19700101080001- – 2038年的某个时间
      Datetime的取值范围: 1000-1-1 --9999- 12-31
2、timestamp和实际时区有关,更能反映实际的日期
  而datetime则只能反映出插入时的当地时区
3、timestamp的 属性受Mysq|版本和SQLMode的影响很大

那么这个区别到底是怎么肥事:我们先来举个栗子:我们先建一个tad表,t1,t2列分别设为datetime类型和timestamp类型
在这里插入图片描述
然后我们先来插入两个时间,查看表中数据
在这里插入图片描述
这里我们的两个数据一样因为我们什么都还没有设置,那我们设置一下时区
在这里插入图片描述
然后我们再来插入两个now现在你会发现t1没变,t2变成了该时区的地方时
在这里插入图片描述
**
好蜡,数据类型就这么多蜡,了解一哈就可以了
**

发布了23 篇原创文章 · 获赞 124 · 访问量 7654

猜你喜欢

转载自blog.csdn.net/qq_45948983/article/details/105554852
今日推荐