zoukankan      html  css  js  c++  java
  • MYSQL数据类型——数值类型

    一.数据类型

       定义:是指对数据进行统一的分类,从系统的角度出发是为了使用统一的方式进行管理,管理更好的利用有限空间。

       SQL中将数据类型分成了三大类:数值类型、字符串类型和时间日期类型。

    1.数值类型 

    数值型数据:都是数值,系统将数值型分为整数型和小数型。

    1.1 整数型

    存放整型数据:在SQL中因为更多考虑如何节省磁盘空间,所以系统将整型又细分成了5类

    1.Tinyint:迷你整型,使用一个字节存储,表示的状态最多为256种,-128~127(常用)。
    2.Smallint:小整型,使用2个字节存储,表示的状态最多为65536种。
    3.Mediumint:中整型,使用3个字节存储。
    4.Int:标准型,使用6个字节存储(常用)。
    5.Bigint:大整型,使用8个字节存储。

    (a)创建一张整型表:

    1 show databases;
    2 set names gbk;
    3 use my_database;
    4 --创建一张整型表:
    5 create table my_int(int_1 tinyint,int_2 smallint, int_3 int, int_4  bigint) charset utf8;    

    (b)插入数据:

    1 insert into my_int values(100,100,100,100); --有效数据
    2
    insert into my_int values('a','b','199','f'); --无效数据:类型限定 (数据类型不正确) 3 insert into my_int values(255,10000,100000,1000000); --错误:超出范围

    注意:SQL中的数值类型全部默认有符号,分正负,有时候需要使用无符号数据,需要给数据类型限定:int unsigned;  --无符号,即从0开始。
    (c)给表增加一个无符号类型:
    1 Alter table my_int add int_5 tinyint unsigned;  --无符号
    
    

    注意:查看表结构,发现每个字段的数据类型之后都会自带一个括号,里面有指定的指定的数字;里面带的数字为显示宽度:数据显示的位数,如-123是4位显示宽度(包含符号),255是3位宽度
    --显示宽度:没有特别的含义,只是默认的告诉用户可以显示的形式而已,实际上用户是可以控制的,这种控制不会改变数据本身的大小。

    1 alter table my_int add int_6 tinyint(1) unsigned;   --指定显示宽度为1
    2 insert into my_int values(127,0,0,0,255,255);

    显示宽度的意义:在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度,通常需要搭配一个前导0来增加宽度,不改变值大小:zerofill(零填充),零填充会导致数值自动变成无符号。

    1 alter table my_int add int_7 tinyint(2) zerofill;  --显示宽度为2,0填充(超过2位不管,低于2位0填充,比如1变为01)

    零填充+显示宽度的效果:

    
    
    1 insert into my_int values(1,1,1,1,1,1,1);
    2 insert into my_int values(100,100,100,100,100,100,100);

    零填充的意义(显示宽度):保证数据格式。

    1.2 小数型
    定义:
    带有小数点或者范围超出整型的数值类型,在SQL中,将小数型细分成2种:浮点型和定点型。
    浮点型:小数点浮动,精度有限,而且会丢失精度。
    定点型:小数点固定,精度固定,不会丢失精度。

    1.2.1 浮点型

        浮点型数据是一种精度型数据,因为超出指定范围之后,会丢失精度(自动四舍五入)。
        浮点型:理论分为两种精度
         Float:  单精度,占用4个字节存储,精度范围(有效数字范围)大概为7位左右,最小值很小很小,最大值很大很大
       Double: 双精度,占用8个字节存储,精度范围大概为15位左右,最小值很小很小,最大值很大很大。

       (a)创建浮点数表: 浮点的使用方式,直接float 表示没有小数部分,float(M,D),M代表总长度,D代表小数部分长度,整数部分长度为M-D。 

    1 CREATE TABLE my_float (f1 float ,f2 float(10,2),f3 float(6,2))charset utf8;  --10位在精度范围之外,6位在精度范围之内,

       (b)插入数据:可以是直接小数,也可以是科学计数法。

    1 Insert into my_float values(1000.10,1000.10,1000.10);  --符合条件
    2 Insert into my_float values(1234567890,12345678.90,1234.56);  --符合条件
    3 insert into my_float values(3e38,3.01e7,1234.56);  --符合条件
    4 insert into my_float values(9999999999,99999999.99,9999.99); --最大值  --符合条件

    注: 浮点数据的插入,整数部分是不能超出长度的,但是小数部分可以超出长度(系统会自动四舍五入)。

      (c)超出长度插入数据

    
    
    1 insert into my_float values(123456,1234.123456768,123.9876543);--小数部分超出ok
    2 insert into my_float values(123456,1234.12,12345.56);--整数部分超出(f3)
    
    

    结果:浮点数一定会进行四舍五入(超出精度范围),浮点数如果是因为系统进位导致整数部分超出指定的长度,那么系统也允许成立.

    1.2.2  定点型

        定点型:绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能(理论上小数部分也不会丢失精度)。

        (a) 创建定点数表:以浮点数作为对比

    1 CREATE table my_decimal(f1 float(10,2), d1 decimal(10,2))charset utf8;

         (b) 插入数据

    1 insert into my_decimal values(12345678.90,12345678.90);  --有效数据
    2 insert into my_decimal values(1234.123456,1234.123456);  --小数部分超出:ok

        (c)查看警告代码

    1 show warnings;

          注意: 浮点数如果进位导致长度溢出没有问题,但是定点数不行。

        (d)插入今晚导致超出长度数据

    
    
    1 insert into my_decimal values(99999999.99,99999999.99); --没有问题
    2 insert into my_decimal values(99999999.99,99999999.999); --d1进位超出范围,不行
    
    
    






  • 相关阅读:
    匹配域名
    异步加载js文件
    Python3.X BeautifulSoup([your markup], "lxml") markup_type=markup_type))的解决方案
    CSDNmarkdown编辑器直接写代码的小效果(一生愿)
    JAVA_OA(十四)番外:JAVAWEB防止表单重复提交的方法整合(包括集群部署)
    JAVA_OA(十四):SSM练手项目bug-Oracle分页web页面无法转到下一页
    JAVA_OA(十四):SSM练手项目bug-JSP页面传递参数的编码问题
    JAVA_OA(八):springMVC对JDBC的操作小项目b
    完全卸载oracle11g教程、Oracle11g的卸载方法和步骤
    JAVA_OA(八):springMVC对JDBC的操作小项目a
  • 原文地址:https://www.cnblogs.com/xwxs/p/9144510.html
Copyright © 2011-2022 走看看