MySQL 数据库常用数据类型及约束

MySQL 数据库常用数据类型及约束

  1. 数据类型

    说明:mysql 常见的几种数据类型

    • 整数类型 (常用类型标粗)

      类型 大小 范围(有符号) 范围(无符号) 用途
      tinyint 1 个字节 (-128, 127) (0, 255) 小整数型
      smallint 2 个字节 (-2^15, 2^15-1) (0, 2^16-1)
      mediumint 3 个字节 (-2^23, 2^23-1) (0, 2^23-1)
      int / integer 4 个字节 (-8 388 608, 8 388 607) (0, 65 535) 大整数型
      bigint 8 个字节 (-2^63, 2^63-1) (0, 2^63-1)

      解释:bit 一般用于状态的标记,因为 2 进制,所以一位二进制可以表示两种状态

    • 浮点数类型

      类型 大小 范围(有符号) 范围(无符号) 用途
      decimal 可以单独使用,也可以精度先设置对 decimal(M,D) 为最多 M位,小数占 D 位
      底层使用字符串存储,以提高精度
      依赖于 M,D 依赖于 M,D 小数值
      float 4 个字节,可以单独使用,也可以精度设置 float(M,D)
      double 8 个字节,可以单独使用,也可以精度设置 double(M,D)
      bit bit(M),占 M 个位,M 的取值范围 [1, 64] ,默认是 1 位类型
    • 字符串类型

      类型 大小 用途
      char 0-255 字节 定长字符串
      varchar(M) 0-65 535 字节 变长字符串
      text 0-65 535 字节 长文本字符串

      解释:char(4),长度位 4 个字符,不足右边补空格,超出截取(效率高,浪费空间)。varchar(4),最长 4 个字符(实际长度 = 实际字符 + 2 个字节,用来记录个数的),可以不足,但超出截取(效率低,节省空间,Mysql 对其进一步优化,效率也不错,使用率高)。

    • 日期和时间类型

      类型 大小 范围 格式 用途
      date 3 个字节 1000-01-01 / 9999-12-31 YYYY-MM-DD 日期值
      time 3 个字节 -838:59:59 / 838:59:59 HH:MM:SS 时间值
      datetime 8 个字节 1000-01-10 00:00:00 / 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合时间和日期值
      year 1 个字节 1901 / 2155 YYYY 或者 YY(不推荐) 年份类型
      timestamp 4 个字节 1970-01-01 00:00:00 / 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 时间戳(实际存储的是毫秒值,取出时进行计算)
    • int 类型使用注意

      1. int(M) ,M 表示宽度,需要结合 unsignedzerofill 使用。设置 zerofill 就意味着无符号

      2. unsigned ,表示无符号数(没有负数)

      3. zerofill ,表示使用 0 填充

      4. 例如 int(3) zerofill ,整数位数不足 3 位的,左边使用 0 补齐,位数超出 3 位的,正常显示(默认情况 M 为 int 的存储能力大小,以空格填充) 。1 使用 001 表示 。

      5. unsignedzerofill 只有整数类型数据拥有

    • 日期输入注意

      1. year 类型,可以输入 4 位数 ,如 2020 ,也可以输入 2 位数,如 20 。如 19-20 则表示 2019-2020

      2. YYYY-MM-DD HH:MM:SS YY-MM-DD HH:MM:SSYYYY-MM-DD YY-MM-DD ,允许不严格输入:任何标点符都可以作为日期部分和时间部分的分隔符 。例如 10-12-01 01:01:0010.12.01 01+20+0920@01@01 01^01^01 等等

      3. YYYYMMDDYYMMDD 没有间隔符的字符串:如果该字符串对于时间有意义,如 20200820200505 可以被解释为 2020-08-2020-0505 ;如果该字符串对于时间没有意义,如 20201490 (月份不合法) ,将解释为 0000-00-00

      4. 对于包含日期部分并带有分隔符的字符串,如果日期小于 10 时,不需要指定 2 位数,如 2020-5-52020-05-05 相同。对于包含时间部分并带有分隔符的字符串,如果时间小于 10 时,也不需要使用 2 位,如 2020-05-05 05:05:052020-5-5 5-5-5 相同。

      5. 一般时间选用 timestamp ,有一个重要特征,如果输入 null 自定设置为系统当前时间

      6. Java 与 Mysql 数据类型对应关系。官方参考地址 JDBC 版本 8

  2. 约束

    • 主键:(primary key)

      在表中唯一表示一个对象的属性,称为主键(对象为一行数据,属性为一列),不重复、默认不为空

    • 非空:(not null)

      输入数据时,不允许为空

    • 唯一:(unique)

      在表中,每一个对象的属性(添加 unique 约束)唯一

    • 默认:(default)

      录入数据时,该属性有默认值(年龄默认 20)不录入该属性,则该属性值为 20,如录入已录入为准

    • 外键:(foreign key)

      实体表的属性在关系表中存在,且可以标识实体表的每一个实体对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。