• 表的数据类型


    数值类型

    MySQL支持所有标准SQL数值数据类型。
    这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
    关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
    MySQL支持的整数类型有TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
    对于小数的表示,MYSQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在mysql中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
    BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
    

    int与tinyint 整数

    写超过范围的 以边界最大最小的表示 但不报错

    设置严格模式报错

    unsigned 设置无符号

    create table int_t (
          ti tinyint,     # 范围****(-128,127)
          i  int,        # 范围*****(-2147483648,2147483647)
          tiun tinyint unsigned,  #无符号(0,255)
          iun int unsigned #无符号(0,4294967295)
     );
    

    float浮点数

    float   保留小数点后5位 # *****单精度
    double  保留好多位 但精度还是不高
    float(5,2),# 5是总位数 2是小数点后2位 在精确位四舍五入 输入12345 确是999.99 
    double(5,2)# 在精确位四舍五入
    

    实列

    drop database day01;
    create database day01;
    use day01;
    
    create table d1(
    f1 float,
    f2 double,
    f3 float(5,2),
    f4 double(5,2));
    
    insert into d1(f1,f2,f3,f4) values(
    1.1233456789,
    1.1233456789,
    1.1233456789,
    1.1233456789
    );
    
    desc d1;
    select * from d1;
    
    +---------+--------------+------+------+
    | f1      | f2           | f3   | f4   |
    +---------+--------------+------+------+
    | 1.12335 | 1.1233456789 | 1.12 | 1.12 |
    +---------+--------------+------+------+
    

    小数值

    decimal 默认取整
    decimal(30,20)#精确后20位
    

    实列

    drop database day01;
    create database day01;
    use day01;
    
    create table d1(
        f1 decimal,
        f2 decimal(30,20)
    );
    
    insert into d1(f1,f2) values(
    1.1233456789,
    1.1233456789
    );
    
    desc d1;
    select * from d1;
    +------+------------------------+
    | f1   | f2                     |
    +------+------------------------+
    |    1 | 1.12334567890000000000 |
    +------+------------------------+
    

    日期时间类型

    年月日时分秒

    内置函数  now() 获取当前时间
    datetime  打卡时间/日志/论坛博客类的评论文章/***** 年月日时分秒
    date      员工生日/入职日期/离职日期/开班时间   *****年月日
    time      上课时间/下课时间/规定上班时间    竞赛数据 时间
    year 年
    timestamp  2038年由于表示范围的问题,导致用的少了  # 不能为空,默认值是当前时间,在修改的时候同时更新时间(uppdet时)
        在timestamp后面加上NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP这个约束表示的范围更大,还能拥有timestamp的特点(不能为空,默认值是当前时间,在修改的时候同时更新时间(uppdet时)) 
    
    举例
    create table time_t2(
        dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  )
    

    添加时间数据

    年月日必须写全
    第一种数字添加
    insert into 表名 values(20180705112222);
    第二种字符串添加
    insert into 表名 values('2018-07-05 11:22:22');
    

    实列

    drop database day01;
    
    create database day01;
    
    use day01;
    create table d1(
    tim1 datetime,
    tim2 date,
    tim3 time,
    tim4 year
    );
    #第一种添加方式 now()函数会自动匹配
    insert into d1(tim1,tim2,tim3,tim4) values(now(),now(),now(),now());
    #第2种手动添加
    insert into d1(tim1,tim2,tim3,tim4) values('2018-07-05 11:22:22','2018-07-05 11:22:22','2018-07-05 11:22:22','2019');
    
    select * from d1;
    desc d1;
    
    +---------------------+------------+----------+------+
    | tim1                | tim2       | tim3     | tim4 |
    +---------------------+------------+----------+------+
    | 2019-08-30 09:43:05 | 2019-08-30 | 09:43:05 | 2019 |
    | 2018-07-05 11:22:22 | 2018-07-05 | 11:22:22 | 2019 |
    +---------------------+------------+----------+------+
    

    字符串类型

    char与varchar

    括号里面是字符不是字节

    char定长速度快占用空间大
    varchar变长速度相对慢占用空间小
    char    0-255字符    定长存储 存储速度更快 占用更多的空间  *****
        char(12)
        alex --> 'alex        ' --> 12的长度
    varchar 0-65535字节  变长存储 存储速度慢  占用的空间小  ****
        varchar(12)
        'alex' --> 'alex4' --> 5的长度
    
    
    
    评论 : varchar
    # 时间和空间
        # 时间换空间
        # 空间换时间
        
        
    LONGTEXT 0-4 294 967 295字节  极大文本数据
    

    实列

    create table ch_t(
        c char,
        c2 char(5),
        vc2 varchar(5)
    );
    
    insert into ch_t values(
    '1','2','3'
    );
    
    select * from ch_t;
    +------+------+------+
    | c    | c2   | vc2  |
    +------+------+------+
    | 1    | 2    | 3    |
    +------+------+------+
    

    enum单选set多选

    枚举 集合

    单选题,只能从有限的条件中选择
    多选题,从有限的条件中选
    乱写为空 如果要乱写报错 就设置约束
    多写多次只显示一次

    create database day01;
    use day01;
    
    create table a1(
        id int,
        name char(12),
        gender enum('男','女'),
        hobby set('吃','喝','玩','乐')
    );
    insert into a1 values 
    (1,'小强','男','吃,喝'),
    (2,'小久','男','吃,乐'),
    (3,'小三','男','吃,乐')
    ;
    
    desc a1;
    
    show create table a1;
    
    select * from a1;
    

    总结

    数值类型
    	int 范围大
    	tinyint 范围小
    	float浮点数 精度小 常用
    	decimal小数值 精度大 不常用
    时间日期类型
    	datetime年月日时分秒
        date年月日
        time时间
        year年	
    字符串类型
    	char定长速度快占用空间大  存储范围小
    	varchar变长速度相对慢占用空间小 存储范围大
    选择类型
        enum单选
        set多选
    

    设置严格模式

    设置严格模式:
        不支持对not null字段插入null值
        不支持对自增长字段插入”值
        不支持text字段有默认值
    
    直接在mysql中生效(重启失效):
    mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
    
    配置文件添加(永久失效):
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  • 相关阅读:
    Easy-Mock模拟get接口和post接口实例
    本地部署Easy Mock
    用matplotlib和pandas绘制股票MACD指标图,并验证化交易策略
    向大家介绍我的新书:《基于股票大数据分析的Python入门实战》
    在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)
    谈谈最近副业挣钱的感受,一要形成体系,二要找平台加持
    进大厂也就这回事,工作后2到3年进大厂操作指南
    最近录制视频挣钱的经过和体会
    以外派的身份进大厂,或许条程序员升级的途径
    面试中更多会考核相关技能的项目经验——再论程序员该如何准备面试
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12386738.html
Copyright © 2020-2023  润新知