大家好,我是jacky,很高兴继续跟大家学习《Mysql 数据分析实战系列教程》,上次课程jacky讲解了表层面的增删改查,jacky说最重要的是增,增就是创建表,作为一个严谨的MySQL适用者,我们说在创建表前还有有一个表设计的步骤,我们要预先搭建出表的结构,那么接下来的几节课,我们大方向都是讲这个表的设计,作为创建表阶段的补充,好,我们回归主题,开始我们今天的讲解;

我们之前创建表的时候,写的最多数据类型,一个是int,一个是varchar;在MySQL官方把MySQL数据类型划分为:数值类型,字符串类型,日期和时间类型三类;那么在实际工作中,我们要处理的数据形态是不是很多,那这节课jacky就跟大家一起探讨,除了我们见过的int和varchar,还有什么常用的数据类型,记下笔记本小节,我们的主题就是数据类型,也是我们所说的表的字段类型;

这部分学习,我们要把握住重点,不要全部都囫囵吞枣的学习,没有重点,大家只要把jacky今天重点讲的这些数据类型从原理上搞清楚,应付工作就够了;

我们先从整理逻辑上把握住数据类型的种类,我们在分别的讲解

(一)数值型

1.1 整数

什么情况用整型?其实我们不用太理论化的讲解,我们的常识就够了,什么时候用int?比如说年龄,id这些肯定是整型,你不能说是字符串是吧,比如说用户名你不可能说是数字啊,这都是显而易见常识性的问题,密码不可能是纯数字万一你还来一个组合呢,是吧,其实很简单,不像书本上写的那么复杂

  • 我们创建表的同时,一定要告诉你这个列是什么样子的,因为它决定着表里面的记录,往里面放数据的时候怎么放,
create table user1(
id int);
desc user1

我们这个,只有一个字段,只能存数字,是吧,我们用desc看下表的结构,我们看下我们是不是看到了整型,后面是一些属性,我们下次课会详细讲解,我们先不用管它

现在我们往这个表里插入数据

insert into user1(id) values(1);
select * from user1; insert into user1(id) values('1');
select * from user1; insert into user1(id) values('52abc');
select * from user1;

我们看到硬要往设定为整型的列中放字符串,是不是, MySQL自动把字符串转成了整型了,为什么?因为我们已经明确规定这是整型

这里我们在用desc看下表的结构,这里有一个难点,就是int后加了一个括号写了11什么意思?这给大家做个简要的讲解把,听不懂没关系,这个不重要,11是int的存储数字的最大长度,我们拿计算器算下2的32次方,select power(2,32);我怎么用mysql算出来的大家不用管,这属于mysql编程的内容,就太难了,我这里没有计算机为了举例方面,就用你难过mysql算了,这里是不是也给大家一些启发,就是mysql不一定要跟着表走,也可以自己输入一些东西,好,言归正传,2的32次方是不是4294967296,10位,长度里面是不是最多存10位,我们在加1位,11位是不是足够了后面我们还会总结,这里有基础的同学可以理解下,零基础的我们不用懂,创建整型,上来我们int就完事了,后面我们什么括号也不用加;

  • int

    • 存储数值范围:

      • 有符号:-2147483648 ~2147483647

      • 无符号:0 ~ 4294967295

  • tinyint(小小int)

    • 存储数值范围:

      • 有符号:-128 ~127

      • 无符号:0 ~ 255

  • smallint(小int)

  • bigint(大int)

    • 存储数值范围:

      • 有符号:-9223372036854775808 ~9223372036854775807

      • 无符号:0 ~ 18446744073709551615

无符号的都是正数,有符号的有正数也有负数;

1.2 小数

1.2.1 浮点

和整型差不多,float就是可以写小数点,

- float

  • double

上述的两个,数值越大越不精准,

比如我们把数据库表中的某一列设置为上述两种数据类型,我们在表中插入数值,比如说是1111222555.9992222,那么存储的数据库的数值有可能,就是1111220000.0000000,所以这时不精确的,工作时一定要慎用,一般情况下我们都是不用的;

1.2.2 定点

  • decimal

    • 精确的

为什么decimal是精确的,因为它的底层,它的内部存的是字符串,所以它是精确的,计算的时候,我们不用管,MySQL已经帮我们做了处理,该怎么计算还是怎么计算;

  • decimal的参数用法:

    • decimal(保存几位有效数据,小数位是几位)

      • 1234.56

      • decimal(6,2)

(二)字符串

2.1 定长

  • char

    • 属性:char(字符长度)
create table demo(name char(6))

2.2 变长

  • varchar

  • text

  • mediumtext

  • longtext

2.3 关于定长与变长的优劣比较

  • 定长浪费了空间,但是查找效率高,变长查找速度慢,但是节省空间;

  • 关于空间与效率的底层原理解释

    • 当我们创建表的时候,create table demo1(name char(7),age int),这种方式是创建定长;create table demo2(name varchar(7),age int),这种方式是创建变长,那我们查询表中数据的时候,前面我们见过我们查找表中全部数据是不是用select *这个语句,是吧,我们要查找age列的数据是不是要跳过name列的这几位字符才能查找到name列,那当定长类型的时候,计算机是不是就跳过7个字符,是不是就查询到age类的数据了;那当变长的时候还行得通吗,是不是不一定跳过几个字符,是不是要多增加一个计算是跳几个字符串得步骤,查找速度相对慢;

(三)时间类型

日期类型就是我们ppt中常见的这及类,关于日期类型有很多人是不接受这种数据类型的,为什么?比如说一个用户注册,我们用MySQL记录它的注册日期和时间,一般企业很少有人用时间类型,当然向阿里这样的企业也在用,它肯定没错,但是建议大家用数字,用整型记录下它当时注册的时间戳,是不是就行了,不用搞什么年月日,而且存数字占用的空间要比存时间小的多,但是时间类型我们也是要学的,毕竟我们做数据研究时,时间类型还是方便统计的;

  • DATE(占3个字节)

    • YYYY-MM-DD(1000-01-01/9999-12-31)
  • TIME(占3个字节)

    • HH:MM:SS(’-838:59:59’/’838:59:59’)
  • YEAR(占1个字节)

    • YYYY(1901/2155)
  • DATETIME(占8个字节)

    • YYYY-MM-DD HH:MM:SS(1970-01-01 00:00:00/9999-12-31)
  • TIMESTAMP(4个字节)

    • YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

MySQL数据分析-(11)表补充:数据类型的更多相关文章

  1. MySql系列之表的数据类型

    存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件 ...

  2. MySQL数据分析-(15)表补充:存储引擎

    大家好,我是jacky,很高兴继续跟大家分享<MySQL数据分析实战>,今天跟大家分享的主题是表补充之存储引擎: 我们之前学了跟表结构相关的一些操作,那我们看一下创建表的SQL模型: 在我 ...

  3. MySQL数据分析-(14)表补充:字符集

    大家好,我是jacky朱元禄,很高兴继续跟大家学习<MySQL数据分析实战>,本节课程jacky分享的主题是表补充之字符集 在分享课程之前,jacky在跟大家强调一下逻辑的重要性,我们学习 ...

  4. MySQL数据分析-(13)表操作补充:索引

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天跟大家分享的主题是表补充之索引: (一)前面课程的小节以及本节课程的逻辑梳理 在正式分享主题之前,jacky先跟大家捋顺一 ...

  5. MySQL数据分析-(12)表操作补充:字段属性

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天我们分享的主题是表操作补充之字段属性,依照惯例第一部分,jacky先跟大家分享本课时的学习逻辑 (一)学习逻辑 我们说创建 ...

  6. MySQL数据分析-(10)SQL基础操作之表操作

    大家好,我是jacky,很高兴跟大家继续分享MySQL数据分析实战课程,前面我们学习了库层面增删改查的SQL语句,这次课jacky将给大家介绍表层面的增删改查, (一)本课时的学习逻辑 表层面的增删改 ...

  7. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  8. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  9. [MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]

    [MySQL数据库之表的详细操作:存储引擎.表介绍.表字段之数据类型] 表的详细操作 存储引擎 mysql中建立的库======>文件夹 库中建立的表======>文件 用来存储数据的文件 ...

随机推荐

  1. (九)mybatis之延迟加载

    一.为什么要使用延迟加载? 使用延迟加载的意义 在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度快. 如果查询单表就可以满足需求,一开始先查询单表,当需要关联 ...

  2. linux 用户切换组

    问题: 因为默认的的网站路径 /var/www/html 是root 用户 root组的, 想要修改什么的需要用sudo 很麻烦. 解决: 将当前用户 hehecat加入至root组,使之有权限对目录 ...

  3. eclipse怎样修改同名包(package)的显示样式、格式

    打开我们的项目,可以看到左侧的package看上去特别多,没有层级. 点击Package Explorer右上角的箭头图标. 可以看到“Flat(扁平)”,“Hierarchical(分层)”两个选项 ...

  4. RMQ((Range Minimum/Maximum Query))ST算法

    给定一个数组,求出给定区间[l,r]中元素的最大值或最小值或者最值的索引. 一看到这个题目,简单,看我暴力出奇迹.暴力当然是可行的.但是时间复杂度很高(O(n^2)).线段树,树状数组也可以解决这个问 ...

  5. controller 层 date 类型的参数,SpringBoot自动转换 dateformat

    这样客户端提交的String 就可以自动转换为Date了!!!

  6. 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建   VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...

  7. 关于NavigationBar的笔记

    1常用几个方法 全局 //设置navigationBar 的类型 ,ps: status bar的状态受navigationbar控制(当用navigationcontroller时,通过设置此属性改 ...

  8. mysql打印用户权限的小技巧

    mysql5.5 5.6 SHOW GRANTS FOR mysql> SELECT DISTINCT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host ...

  9. goroutine的设计与实现

    goroutine背后的系统知识 http://www.sizeofvoid.net/goroutine-under-the-hood/ 下周写完

  10. 1.使用Vue.js实现品牌案例添加功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...