zoukankan      html  css  js  c++  java
  • 数据库_12_数据类型(列类型)

    所谓的数据类型:对数据进行统一的分类,从系统的角度出发为了能够使用统一的方式进行管理,更好的利用有限的空间。

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

    1、数值型

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

    1.1整数型

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

    Tinyint 迷你整型:使用一个字节存储.表示的状态最多为256种(常用)

    Smallint 小整型:使用2个字节存情.表示的状态最多为65536种

    Mediumint:中整型.使用3个字节存储

    Int:标准整型,使用4个字节存储(常用)

    Bigint:大整型,使用8个字节存储

     创建一张整形表:

    -- 创建整型表
    create table my_int(
    int_1 tinyint,
    int_2 smallint,
    int_3 int,
    int_4 bigint
    )charset utf8;
    

    插入数据:只能插入整型,并且只能插入范围内的整型

    -- 插入数据
    insert into my_int values(100,100,100,100);  --有效数据
    insert into my_int values('a','b','199','f'); -- 无效数据:类型限定
    insert into my_int values(255,10000,10000,10000); -- 错误:超出范围
    

    注:ERROR 1064指的是语法错误

    SQL中的数值类型全部都是默认有符号:分正负
    有时候需要使用无符号数据,需要给数据类型限定:intunsigned,无符号,从0开始

    -- 给表增加一个无符号类型
    alter table my_int add int_5 tinyint unsigned; --无符号类型
    

    -- 插入数据
    insert into my_int values(127,1000,10000,1000000,255); 
    

     

     

    查看表结构的时候.发现每个字段的数据类型之后都会自带一个括号.里面有指定的数字

     

    显示宽度:没有特别的含义、只是默认的告诉用户可以显示的形式而已,实际上用户是可以控制的.这种控制不会改变数据本身的大小.

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

     

    显示宽度的意义-在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度

    -通常需要搭配一个前导0来增加宽度.不改变值大小-zerofill(零填充)-零填充会导致数值自动变成无符号

    alter table my_int add int_7 tinyint(2) zerofill; -- 指定显示宽度为2,不够则用0填充,超出则不管
    

     

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

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

    1.2小数型

    小数型:带有小数点或者范围超出整型的数值类型。(浮点型属于小数型,浮点型有精度丢失)

    SQL中将小数型分成两种:浮点型和定点型

    浮点型:小数点浮动,精度有限,而且会丢失精度                   定点型:小数点固定,精度固定,不会丢失精度

    1.2.1浮点型

    浮点型数据时一种精度型数据,因为超出指定范围之后,会丢失精度(自动四舍五入)。理论分为两种精度。

      float:单精度,占用4个字节存储数据,精度范围大概为7位左右

      double:双精度,占用8个字节存储数据,精度方位大概为15位左右

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

    -- 浮点数表
    create table my_float(
    f1 float,
    f2 float(10,2), -- 10位在精度范围之外
    f3 float(6,2) -- 6位在精度范围之内
    )charset utf8;
    

     

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

    -- 插入数据(符合条件)
    insert into my_float values(1000.10,1000.10,1000.10);  
    insert into my_float values(1234570000,12345678.90,1234.56); 
    insert into my_float values(3e38,3.01e7,1234.56); 
    insert into my_float values(9999999999,99999999.99,9999.99); -- 最大值
    

     

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

    -- 插入数据(超出范围)
    insert into my_float values(123456,1234.12345678,123.9876543);  -- 小数部分超出
    insert into my_float values(123456,1234.12,12345.56); -- 整数部分超出
    

     

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

     

    1.2.2定点型

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

    创建定点数表:以浮点数为对比

    -- 创建定点数表
    create table my_decimal(
    f1 float(10,2),
    d1 decimal(10,2)
    )charset utf8;
    

     

    插入数据:定点数的整数部分一定不能超出长度(进位不可以),小数部分的长度可以随机超出(系统自动四舍五入)

    -- 插入数据
    insert into my_decimal values(12345678.90,12345678.90); -- 有效数据
    insert into my_decimal values(1234.123456,1234.123456);  -- 小数部分超出,数据有效
    

     

    -- 查看警告
    show warnings;
    

     

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

    -- 插入数据
    insert into my_decimal values(99999999.99,99999999.99); -- 没有问题
    insert into my_decimal values(99999999.99,99999999.999);  -- 进位超出范围
    -- 查看数据效果:
    select * from my_decimal;
    

     

    2、时间日期类型

    注:Time中:-指负,+指正。year(2):1970-2069

    创建时间日期表:

    -- 创建时间日期表
    create table my_date(
    d1 datetime,
    d2 date,
    d3 time,
    d4 timestamp,
    d5 year
    )charset utf8;
    

    -- 插入数据
    insert into my_date values('2015-9-28 11:50:36','2015-9-28','11:50:54','2015-9-28 11:51:08',2015);
    
    -- 时间使用负数
    insert into my_date values('2015-9-28 11:50:36','2015-9-28','-11:50:54','2015-9-28 11:51:08',2015);
    insert into my_date values('2015-9-28 11:50:36','2015-9-28','-211:50:54','2015-9-28 11:51:08',2015);
    insert into my_date values('2015-9-28 11:50:36','2015-9-28','-2 11:50:54','2015-9-28 11:51:08',2015);-- -2指的是过去两天,会换算成48(小时)
    
    -- year可以使用2位或者4位
    insert into my_date values('2015-9-28 11:50:36','2015-9-28','11:50:54','2015-9-28 11:51:08',69);
    insert into my_date values('2015-9-28 11:50:36','2015-9-28','11:50:54','2015-9-28 11:51:08',70);
    

     

     

     

     

     通过函数可以获取到真正的时间戳:



  • 相关阅读:
    微信小程序实战练习(仿五洲到家微信版)
    vue2.0项目 calendar.js(日历组件封装)
    基于thinkphp的后台管理系统模板快速搭建
    你不知道的javascript(上卷)读后感(二)
    你不知道的javascript(上卷)读后感(一)
    教你10分钟搭建酷炫的个人博客
    Webpack学习-工作原理(下)
    Webpack学习-工作原理(上)
    Css Secret 案例Demo全套
    基于excel导入数据到ms sql server
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/9152446.html
Copyright © 2011-2022 走看看