MySQL基本数据类型

时间:2021-08-07
本文章向大家介绍MySQL基本数据类型,主要包括MySQL基本数据类型使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

整型

'''
    分类
        TINYINT SMALLINT MEDUIMINT INT BIGINT
    作用
        存储年龄,等级,id,号码等等
        图片介绍地址:https://images2017.cnblogs.com/blog/1036857/201708/1036857-20170801181433755-146301178.png
    以TINYINT作验证
        是否有符号
            默认情况下是带符号的
        超出会如何
            超出限制只存最大可接收值
        create table t9(id tinyint);
        insert into t9 values(-129),(256);
    约束条件之unsigned(无符号)
        create table t10(id tinyint unsigned);
        insert into t10 values(-1),(256);
    create table t11(id int);
    insert into t11 values(-1),(256);
    int默认也是带符号的
    整型默认情况下都是带有符号的
    针对整型,括号内的宽度到底是干嘛的?(作显示,并不是指只能存多少位)
        create table t12(id int(8));
        insert into t12 values(123456789);
        insert into t12 values(1);
    特例:只有整型括号里面的数字不适表示限制位数
    id int(8)
        如果数字没有超出8位,那么默认用空格填充至8位
        如果数字超出了8位,那么有几位就存几位(但是还是要遵守最大范围)
    约束条件之zerofill
        create table t13(id int(8) unsigned zerofill);
            用0填充至8位
    总结:
        针对整型字段,括号内无需指定宽度,因为它默认的宽度已经足够显示所有的数据了

'''

浮点型

'''
    分类
        float double decimal
    作用
        身高,体重,薪资...
    存储限制
        float(255,30) # 总共255位,小数部分占30位
        double(255,30) # 总共255位,小数部分占30位
        decimal(65,30) # 总共64位,小数部分占30位
    精确度验证
        create table t15(id float(255,30));
        create table t16(id double(255,30));
        create table t17(id decimal(65,30));
        
        insert into t15 values(1.111111111111111111111111111111);
        insert into t16 values(1.111111111111111111111111111111);
        insert into t17 values(1.111111111111111111111111111111);
        
        精确度:float<double<decimal
    要结合实际应用场景,三者都能使用
    扩展:其实在实际生产中,很多看似需要用整型或者浮点型存储的数据,内部可能都是用的字符类型存储
'''

字符类型

'''
    分类
        char
            定长;char(4)数据超过四个字符直接报错,不够四个字符空格补全
        varchar
            变长;varchar(4)数据超过四个字符直接报错,不够有几个存几个
    create table t18(name char(4));
    create table t19(name varchar(4));
    insert into t18 values('a');
    insert into t19 values('a');
    介绍一个小方法char_length统计字段长度
        select char_length(name) from t18;
        select char_length(name) from t19;
        首先可以肯定的是char硬盘上存的绝对是真正的数据,带有空格;但是在显示的时候,mysql会自动将多余的空格剔除
        再次修改sql_mode,让MySQL不要做自动剔除操作
            set global sql_mode = 'strict_trans_tables,pad_char_to_full_length'; 因为是修改,所以之前的严格模式也需要带上
    char与varchar对比
        char
            缺点:浪费空间
            优点:存取都很简单,直接按照固定的字符存储数据即可
            jason egon mike
            存按照字符长度存,取也直接按照字符长度取
        varchar
            有点:节省空间
            缺点:存取较为麻烦
            1bytes+jason 1bytes+egon 1bytes+mike
            存的时候需要制作报头,取的时候也需要先读取抱头,之后才能读取真实数据
        以前基本上都是用的char,其实现在用varchar的也挺多
        后面使用哪个都行,建议使用varchar
        补充:
            进来公司之后你完全不需要考虑字段类型和字段名,因为产品给你发的邮件上已经全部指明了
'''

时间类型

'''
    date
        年月日2021-8-7
    datetime
        年月日时分秒2021-8-7 10:10:10
    time
        时分秒10:10:10
    Year
        2021
    create table student(
        id int,
        name varchar(16),
        born_year year,
        birth date,
        study_time time,
        reg_time datetime
    );
    insert into student values(1,'egon','2020','1880-11-11','11:11:11','2021-11-11 11:11:11');
'''

枚举与集合类型

'''
    分类
        枚举(enum):多选一
        集合(set):多选多(也可以单选)
    具体使用
        create table user(
            id int,
            name char(16),
            gender enum('male','female','others')
        );
        insert into user values(1,'jason','male');
        insert into user values(2,'egon','xxxooo'); 报错
        # 枚举字段,后期在存数据的时候只能从枚举里面选择一个存储
        create table teacher(
            id int,
            name char(16),
            gender enum('male','female','others'),
            hobby set('read','DBJ','hecha')
        );
        insert into teacher values(1,'jason','male','read,DBJ');
        insert into teacher values(2,'egon','male','read');
        insert into teacher values(3,'mike','others','生蚝'); 报错
        # 集合可以只写一个,但是不能写没有列举的
'''
while True: print('studying...')

原文地址:https://www.cnblogs.com/xuewei95/p/15113232.html