MySQL数据库学习资料(五)

2019年度数据库管理系统:MySQL

目录

2019年度数据库管理系统:MySQL

SQL支持的数据类型

整型数值型类型

固定浮点数DECIMAL

浮点类型FLOAT,DOUBLE

二进制数据类型BIT

时间数据类型和对应值的形式:

字符串类型

CHAR和VARCHAR类型

ENUM类型


SQL支持的数据类型

大家在学习C的时候会接触到int, str,float等数据类型,在学习python的时候也会接触到数据类型:如int, string,list, dict等。在不同编程的语言中,不同数据类型有自己的特性。这里我们要学习的MySQL也有自己的一套数据类型。

My SQL支持的数据类型与其他数据库管理系统(DBMS)基本相同,按种类可以分为:Numeric,Date and Times, String, Spatial,JSON。

整型数值型类型

知识点1:各个数据类型的类型和范围

知识点2:INT(4)中4的含义是指添加ZERO FILL时的显示长度

整型数值类型:https://dev.mysql.com/doc/refman/8.0/en/integer-types.html

在设定表中属性的数据类型时,我们可以额外设定各个数据的显示长度,如INT(4),显示长度不影响数据本身的长度,如一个TINYINT(4)的数据占用的空间与一个TINY(3)占用的空间时是相同的。

mysql中设置了储存类型后,储存是定长的,也就是说,int(1) 和 int(4) 在硬盘中所占的字节数都是一样的

我们知道,int类型占4个字节,tinyint占1个字节。int(1) 和 int(4) 从本身长度还是存储方式上都是一样的,区别就是显示的长度不同,但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,int(4)指定后就会显示为0002。

从数据占用存储空间的大小来看:int(1)和tinyint(4) 相比,肯定int 大。

注意数字类型后面括号中的数字,不表示长度,表示的是显示宽度,这点与 varchar、char 后面的数字含义是不同的。tinyint一个字节   smallint  两个字节   MEDIUMINT三个字节 

也就是说不管 int 后面的数字是多少,它存储的范围始终是 -2^31 到 2^31 - 1。

显而易见,int(1) 和 tinyint(1) ,在设计数据库的时候应该选择tinyint(1)。所占的储存空间越少越好,当然要够用才行。像这样储存一个 个位数的字段,还是用tinyint(1)的好。

关于“数据类型(长度)”的总结

  1. 规定类型之后,存储是定长的,int(1)和int(4)从本身长度还是存储方式上都是一样的。mysql里,int(1)和int(4)的区别就是显示的长度,但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,如2 int(3)指定后就会显示为002
  2. int 存储占4个字节, tinyint   存储占1个字节,存储长度决定了他们表示的数字范围不同。int表示的数字范围是:从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。tinyint 表示的范围是0-255之间的数字。
  3. tinyint(1),和tinyint(3)没什么区别,存123都能存的下,而如果tinyint(3) zerofill 的话,插入值 12,会存储012,zerofill自动左边补零,这才是限制显示长度。

更多关于整型数据说明的参考资料:在这里我们能学习到MySQL中数值与布尔变量之间的关系:

https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html

固定浮点数DECIMAL

知识点:DECIMAL(P,D)中P和D的含义与取值范围

MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。

要定义数据类型为DECIMAL的列,请使用以下语法:

column_name  DECIMAL(P,D);

在上面的语法中:P是表示有效数字数的精度。 P范围为1〜65。

D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。

DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。

与INT数据类型一样,DECIMAL类型也具有UNSIGNED和ZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。

如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。

以下示例使用DECIMAL数据类型定义的一个叫作amount的列。

amount DECIMAL(6,2);

在此示例中,amount列最多可以存储6位数字,小数位数为2位; 因此,amount列的范围是从-9999.99到9999.99。

MySQL允许使用以下语法:

column_name DECIMAL(P);

这相当于:

column_name DECIMAL(P,0);

在这种情况下,列不包含小数部分或小数点。

此外,我们甚至可以使用以下语法。

column_name DECIMAL;

在这种情况下,P的默认值为10。

更多关于DEMICAL知识的参考资料:

https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html

https://blog.csdn.net/qq_34306360/article/details/79721619

浮点类型FLOAT,DOUBLE

知识点:默认的float类型都只能存6个数字(包括小数点前后的位数),整数超过6位就被科学计数表示(id=4),小数位超出则需要四舍五入

对于单精度浮点数Float:  当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成double或者decimal,两者的差别是double是浮点计算,decimal是定点计算,会得到更精确的数据。

更多关于FLOAT、DOUBLE的参考资料:

该内容额外包含:在将来的MySQL版本中,FLOAT(M,D)的用法即将被删除,因此这里不要求大家掌握。

https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html

二进制数据类型BIT

BIT数据类型中,它的值是一个二进制位,不是0就是1,类似Boolean类型中的True和False。

BIT类型是数据的插入总结:

使用【b ' 二进制数据 ' 】这种方式, 是二进制整形常量,这种二进制的整形常量,存储到bit 类型列的时候,也是按照二进制字面数值来存储的,而不是按照ascii的值,非常好用,但是,需要注意的是:

数据不能超过列类型表达的范围,如把 b'11'存入到 bit(1) 中,就会包data too long 

b' ' ,这个单引号中间的部分,只能出现 0 或者 1,若出现了其他数据,如2 等,则会报语句解析错误。

更多关于BIT数据类型的介绍:

讲解了BIT插入1时为何显示49的原因

https://blog.csdn.net/hemeinvyiqiluoben/article/details/50441718

时间数据类型

时间数据类型和对应值的形式:

 DATETIME 

用于表示 年月日 时分秒,是 DATE TIME 的组合,并且记录的年份(见上表)比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。

 TIMESTAMP

  • TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份(见上表)比较短暂。
  • TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再存放;当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是  不一样的。
  • 表中的第一个 TIMESTAMP 列自动设置为系统时间(CURRENT_TIMESTAMP)。当插入或更新一行,但没有明确给 TIMESTAMP 列赋值,也会自动设置为当前系统时间。如果表中有第二个 TIMESTAMP 列,则默认值设置为0000-00-00 00:00:00
  • TIMESTAMP 的属性受 Mysql 版本和服务器 SQLMode 的影响较大。

     如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP

 DATE

    DATE 用于表示 年月日,如果实际应用值需要保存 年月日 就可以使用 DATE

 TIME

    TIME 用于表示 时分秒,如果实际应用值需要保存 时分秒 就可以使用 TIME

 YEAR

    YEAR 用于表示 年份,YEAR 2 位(最好使用4位)和 4 位格式的年。 默认是4位。如果实际应用只保存年份,那么用 1 bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。

字符串类型

知识点:注意CHARVARCHAR的区别

MySQL支持的字符串类型:

经常用到的是CHARVARCHARENUM以及TEXT

CHAR和VARCHAR类型

都用于存储较短的字符串,二者主要的区别为存储方式不同,CHAR的长度固定,VARCHAR的长度可变,检索时,CHAR删除尾部的空格,VARCHAR则保留尾部的空格。

用法区别的介绍

https://blog.csdn.net/weixin_43054397/article/details/91126605

ENUM类型

枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1-255个成员的枚举需要1个字节存储,对于255-65535个成员,需要2个字节来存储。最多允许有65535个成员。ENUM类型忽略大小写,当插入值不在枚举的范围内时,不会报错,会将第一个值插入。

具体的实现方法可以参考官方网页

https://dev.mysql.com/doc/refman/8.0/en/enum.html

其他博客关于ENUM关键字的介绍:

https://www.cnblogs.com/jiayu123/p/11333809.html

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值