• 零基础学SQL(二、MYSQL数据类型)


    目录

    一、数据类型

    一、数值型数据

    1、整数类型

     2、小数类型

    二、字符串类型

    1、char 

    2、VARCHAR

    3、BLOB和TEXT类型

    三、日期和时间类型

     四、枚举类型

     五、set类型


    一、数据类型

            首先得明白什么是数据类型,数据类型其实就是一种对数据的约定,就像我们在用表格统计数据的时候,为了方便查看,得按照表头填写,姓名,年龄一般都是按照格式填写,这个时候其实就相当于规定了,姓名为一个字符串类型,年龄可以是个数字类型,学历这种带有枚举值的就可以定义为枚举类型。

    905ecf28bb0b4001b192eaa0b21d978f.png

    下面介绍下MYSQL的数据类型,MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。因此介绍以下MYSQL的数据类型

    一、数值型数据

    1、整数类型

    mysql提供的整形类型如下: 

    d8a1f2ef8c2e4e9589fe3efc02d87aed.png

             这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。当使用这些整数类型之一创建列时,MySQL将为存储数据分配合适大小的空间,从1个字节(tinyint)到8个字节(bigint)不等。因此在选择类型时,只需要确保能够容纳预期的最大数字即可,这样可以避免浪费不必要的存储空间。

            整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以使正数的上限提高一倍。例如TINYINT.UNSIGNED可以存储的范围是0~255,而TINYINT 的存储范围是-128~127。还有ZEROFILL修饰符规定0(不是空格)可以用于填补输出值。请注意,使用这个修饰符可防止MySQL存储负值。

    UNSIGNED测试

    比如我们新建一个表,字段类型选择tinyint,然后修改字段值为128,超过其最大限制,则会报错

    dc5723b034ee40158852637e5bf8320f.png

    修改 tinyint 为 tinyint UNSIGNED,再试下

    9d05ff1b4c8349a9ab581532275d6173.png

    此时128就可以包容了,

    8f35680f8585467ebf9182c9715ac949.png

    同样此时输入负数,则会报错 

    e8026d4a166a495db5373547281bfc60.png

     ZEROFILL测试,设置字段class类型为 int ZEROFILL,长度为6,输入12

    dde1f906035f4baa94d2097a96fa171e.png

     则实际数据如下 ,补全至六位

    b9437287b7af4643a91cb603af316a2a.png

     2、小数类型

            MySQL支持的三个浮点类型是FLOAT,DOUBLE和DECIMAL类型。FLOAT数值类型用于表示单精度浮点数值,而DOUBLE数值类型用于表示双精度浮点数值。

            当使用浮点类型时,可以指定其精度(小数点左边到右边所允许的数字总位数)和有效位(小数点右边所允许的数字位数),当然这不是必需的。需要注意的是,如果数字位超过了该列所定义的精度或有效位,那么该列中存储的数据将会被四舍五入。例如,一个定义为float(4,2)的列将会存储4位数字,其中两位在小数点左边,两位在小数点右边。因此,如果向该列添加数据27.44和8.19是允许的,但17.8675将会被四舍五入为17.87,178.375则会产生一个错误。和整数类型一样,浮点列也可以被定义为unsigned,但这里只是禁止列中存放负数,并没有改变该列所存储数据的范围。

    二、字符串类型

    MySQL提供了8个基本的字符串类型,可以存储范围从简单的一个字符的字符串到i大的文本块或二进制数据的字符串数据。

    2f3700c3422f4a548c661cbc3c7e5221.png

    1、char 

            最简单的类型是CHAR类型,它用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符范围为0到255,指定了要存储的值的长度,例如,语句CHAR (10)指定了一个长度为10个字符的值。比指定长度小的值将会用空格适当填补﹔比指定长度大的值将被自动截短。

    2、VARCHAR

            CHAR类型的-一-个变体是VARCHAR类型,它用于变长字符串,它也必须带有一个范围在0到255之间的大小指示器。VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)因为字段会根据它的内容动态地增长和缩短,所以当不能确定字段要存储多少个字符时,使用这种类型是--个很好的想法;因为VARCHAR类型只使用需要的最小数目的字节,所以它在数据库性能方面导致了更大的存储效率和(可能)空前的改进。与CHAR类型一样,VARCHAR类型也有一个可选的BINARY修饰符,它的功能跟前面的描述相同。

    3、BLOB和TEXT类型

            BLOB和TEXT都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。BLOB类型区分大小写,TEXT类型不区分大小写。

            实际上,它们分别属于两组不同的数据类型家族﹔字符类型是TINYTEXT,SMALLTEXT,TEXT,NEDIUMTEXT,CONGTEXT﹔对应的二进制类型是TINYBLOB,SMALLBLOB,BLOB,MEDIUPMBLOB,LONGBLOB。BLOB是SMALLBLOB的同义词,TEXT是 SMALLTEXT的同义词。

    三、日期和时间类型

            除了字符串和数字,处理信息还会经常用到日期或时间。这种类型的数据被称为时间型数据。MySQL用DATE 和YEAR类型描述简单的日期值,而使用TIME类型描述时间值。这些值可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE类型的值应该使用连字号作为分隔符分隔开,而TIME类型的值应该使用冒号作为分隔符分隔开。

    8dd42c29c9554f53a8dad9628e94b529.png

    日期格式组成成分 

    aa147b0abc6f440fb0e2b99c6c45900c.png

     四、枚举类型

    Enum枚举类型是字符串类型,其值是从事先指定的一系列值中选出,适用在某列的取值范围已经固定,且在设置枚举类型的时候要给定枚举值,比如设置性别为枚举类型,如果仅仅设置enum类型,则会报错如下

    c91509a61f154509b463d4c148e8472b.png

     这个时候在下边加上值 或者类型里边填写 enum('男','女')就可创建成功

    cecc5f785ded411db7a927a9c42f689b.png

     这个时候如果随便输入其他的值,则会报错

    1265 - Data truncated for column 'sex' at row 1

    778bdd5e078043909b7d0327fb348f1a.png

     五、set类型

            SET类型与ENUM类型相似但又不完全相同, SET类型允许从预先定义的字符串值集合中选取任意数目的值。语句使用ENUM类型的字段最多包含一个元素,而SET类型不同,语句为SET类型的字段可以包含0个、1个或1个以上从允许值集合中选取的值。这使SET类型可以做多个选择的选取。通俗点可以理解ENUM为单选,SET为多选,可以选择多个选项,同样创建SET类型也需要给定值。

    d234b450b66c47eb8e8496add782f108.png

    插入或者修改SET类型sql多个值用逗号隔开 ,如下:

     update   student a set a.setTest ='大专,本科' where a.id='2';

  • 相关阅读:
    JVM —— 运行时数据区域
    04-Redis哨兵高可用架构
    “企业级零代码黑客马拉松”决赛圆满落幕
    图论| 827. 最大人工岛 127. 单词接龙
    【Maxent物种分布模型】气候变化对响尾蛇地理分布的影响
    Android 从Java线程到Handler机制源码分析
    艾体宝案例 | 智能家居销售商的数字化转型故事
    OpenLDAP配置web管理界面PhpLDAPAdmin服务-centos9stream
    基于NVIDIA的deepstream进行串行多任务模型开发,DeepStream 多模型组合检测(精)
    JavaWeb AJAX请求
  • 原文地址:https://blog.csdn.net/jungeCSND/article/details/127131726