• 数据类型


    /*
    mysql支持的数据类型
    数值类型:
         数据类型   字节数
         tinyint     1
         smallint    2
         mediumint   3
         int、integer  4
         bigint        8
    浮点类型:
         float         4
         double 8
    定点值类型
         dec(m,d),decimal(m,d)  m+2  最大取值范围和double相同,给定decimal的有效取值范围由m和d决定
    位类型
       bit(m)       1~8         存放的是二进制数据。所以m的范围为 1~64                                
    */
    --对于整形数据,mysql支持在类型名称后面的小括号内指定宽度。例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度默认为int(11)。一般配合zerofill使用,zerofill就是用0填充的意思,在数字位数不够的空间用字符0填满
    
    create table t1 (id1 int,id2 int(5));-- 建表t1,两个字段指定数值宽度为int和int(5)
    insert into t1 values (1,1); -- 插入数值,没发现格式异常
    alter table t1 modify id1 int zerofill;
    alter table t1 modify id2 int(5) zerofill;
    select * from t1;
    --可以发现,在数值前面用字符0填充了剩余的宽度。设置宽度限制后,如果设置大于宽度限制的值,会不会截断或者插入不进去?答案是坑定的:不会对插入的数据有任何影响,还是按照类型的实际精度进行保存。这时候宽度格式已经失去了意义
    insert into t1 values (1,1111111);
    
    -- 所有的整数类型都有一个可选属性 unsigned(无符号)。就是将二进制保存的符号位当成正常位使用,所以它的取值范围是0~正常值的2倍。注意:如果一个列指定为zerofill,则mysql自动为该列增加unsigned属性
    insert into t1 values (1,-123);-- 这里就不能插入负数了
    
    --整数类型另一个属性auto_increment属性很熟了,就展示个例子吧
    create table ai(id int auto_increment not null unique);
    insert into ai values ();
    select * from ai;
    drop table ai;
    /*
    对于小数的表示,mysql分为两种方式:浮点数和定点数。浮点数包括单精度float和双精度double,定点数只有decimal一种表示形式。定点数在mysql内部以字符串形式存放,比浮点数更加精确,适合用来表示货币等精度高的数据
    浮点数和定点数都可以使用类型名称后面加“(M,D)”的形式表示。(M,D)表示该值一共显示M位数字(整数位+小数位),D位位于小数点后面,M和D又被称为精度和标度。小数部分超过标度四舍五入。浮点数后面加精度和标度识一种非标准用法,如果要用于数据库的歉意最好不要这样使用
    float和double不指定精度时会按照实际精度来显示,而decimal不指定精度时,默认的整数位是10,小数位是0
    注意:浮点数超过精度时插入不进去的
    */
    drop table t1;
    create table t1
    (
     id1 float(5,2) default null,
     id2 double(5,2) default null,
     id3 decimal(5,2) default null
    );
    --id1,id2分别插入数据1.234,id3字段插入1.23
    insert into t1 values (1.234,1.234,1.23); -- id1和id2标度限制变成为1.23
    --都插入1.234
    insert into t1 values (1.234,1.234,1.234); 
    select * from t1;
    --将精度、标度全部去掉再加入数据1.23
    truncate table t1;
    alter table t1 modify id1 float;
    alter table t1 modify id2 double;
    alter table t1 modify id3 decimal;
    insert into t1 values (1.23,1.23,1.23);
    insert into t1 values (1.23,567542.12,1.23);-- 跟整型不一样,超过精度插不进
    
    --对于bit(位)类型,用于存放字段位,bit(m)可以用来存放多位二进制数,m范围从1~64,如果不写默认为1位。对于位字段,直接使用select命令将不会看到结果,可以使用bin()(显示为二进制格式)或者hex(显示为16进制格式)函数来读取,我使用客户端可以正常显示二进制
    create table t2(id bit(2));
    insert into t2 values (3);
    insert into t2 values(1);
    select * from t2;
    select bin(id),hex(id) from t2;
    drop table t2;
    --插入二进制,首先转换成二进制,如果位数允许,将成功插入;如果位数大于表定义的位数,则插入失败
    
    /*
    日期时间类型
    日期和时间类型      字节      格式                        最小值
    DATE                 4         yyyy-MM-dd                 1000-01-01
    DATETIME             8         yyyy-MM-dd HH:MM:SS        1000-01-01 00:00:00
    TIMESIMPLE           4         yyyyMMddHHMMSS             19700101080001
    */
    create table t
    (
     d date,
     t time,
     dt datetime
    );
    insert into t values(now(),now(),now());
    drop table t;
    select * from t;
    --year类型主要用来表示年份,当只需要记录年的时候,year比date将更节省时间
    create table t(y year);
    insert into t values(2011);
    /*
    mysql以YYYY格式检索和显示year值,范围是1901~2155.当使用两位字符串表示年份的时候。其范围为00~99
    00~69范围的值被转换为2000~2069范围的year值;70~99范围的值被转换为1970~1999范围的year值
    YYYY-MM-DD HH:MM:SS或者YY-MM-DD HH:MM:SS格式的字符串,允许“不严格”语法,即任何标点符都可以被用来做日期部分或者时间部分的间隔符。如果日和月的值小于10,可以不需要指定两位数,如果时分秒的数值小于10也可以不指定两位数
    */
    
    /*
    字符串存储类型
    */
    -- char和varchar很类似,都用来保存mysql中较短的字符串。两者的区别主要在于存储方式的不同:char列的长度固定为创建表时声明的长度,声明长度可以为0~255之间的任何值。varchar是可变字符,长度为0~255(mysql5,。0.3版本前)或者65535之间的值。
    create table vc (v varchar(4),c char(4));
    insert into vc values('ab','ab');
    select length(v),length(c) from vc;
    select concat(v,'+'),concat(c,'+') from vc;
    drop table vc;
    --binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串而不包含非二进制字符串
    --enum类型。枚举类型,它的值范围需要在创建表的时候通过枚举方式显式指定,对于1~255个成员的枚举需要1个字节存储,对于255~62235个成员需要两个字节存储。最多允许有62235个成员
    create table t (gender enum('M','F'));
    insert into t values ('M');
    insert into t values ('f');
    insert into t values (null);
    insert into t values ('c');--无法插入
    insert into t values ('1');
    insert into t values ('2');
    insert into t values ('3');-- 无法插入
    select * from t;
    -- 可以发现,枚举类型插入数据不区分大小写,但是保存的数据是按照枚举中元素保存的。枚举插入有两种方式,一种是插入枚举中指定元素,而是插入枚举中指定元素下标,注意,下标从1开始
    /*
    set数据类型和枚举有点类似,也是一个字符串对象,根据成员的不同,存储上也有所不同。
    1~8个成员的集合,占1个字节  9~16个成员的集合,占2个字节  17~24个成员的集合,占3个字节 25~32个成员的集合,占4个字节 33~54个成员的集合,占8个字节
    除了存储外,set和enum最主要的区别在于set类型一次可以选取多个成员,而enum只能选取一个
    */
    create table t (col set('a','b','c','d'));
    insert into t values ('a,b'),('a,d,a'),('a,b'),('a,c'),('a');
    select * from t;
    insert into t values ('e');-- 插入失败
    insert into t values ('a,b,e');-- 插入失败
    --set的类型可以允许值集合中旅选择一个或多个元素进行组合,所以对于输入的值只需要是在允许的值的组合范围内,都可以正确地追到set集合的列中。对于超出范围的值无法注入,如果注入的集合有重复元素,自动去重复,按出现第一次算
  • 相关阅读:
    HTTP状态码
    python 连接 MySQL 数据库
    JS事件基础和绑定
    7月13号:2D的转换和过渡,动画效果设置
    JS事件流
    7月14日:JS的基础语法
    JS对表单的操作
    7月16日:DOM总结
    DOM样式表
    7月9号
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5595661.html
Copyright © 2020-2023  润新知