MySQL5.7-数据类型和约束条件

系列文章目录

一、数据类型

在MySQL中,每个字段都必须指定数据类型,且以后存入的值必须就是该类型。

  • 创建数据表的语法:
    先了解一下创建表的语法,有助于理解后续内容:

    CREATE TABLE 表名(
       字段名 字段类型(宽度) 若干约束条件,
       # 如:字段名为name,类型为CHAR,宽度为10,约束条件为该字段的值不能为空
       name CHAR(10) NOT NULL,
       ……
    );
    

    宽度在不同的类型有不同的作用,上述例子中CHAR(10)代表最多存10个字符。其他类型会在后面讲到。

  • 整型:

    类型大小范围(有符号)范围(无符号)
    TINYINT1 bytes(-128,127)(0,255)
    SMALLINT2 bytes(-32 768,32 767)(0,65 535)
    MEDIUMINT3 bytes(-8 388 608,8 388 607)(0,16 777 215)
    INT或INTEGER4 bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
    BIGINT8 bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)

    注意:整型的宽度指显示宽度,即显示的位数。如:int(8)类型的字段,如果设置了ZEROFILL约束,且数值不足8位,就用0补充左边不足的位数。如果超过8位,就正常显示,对存储没有影响。

  • 浮点型:

    类型大小范围(有符号)范围(无符号)
    FLOAT4 bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)
    DOUBLE8 bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
    DECIMAL对于从、DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值

    浮点类型的宽度是指总共的位数,和小数所占的位数。如DECIMAL(20,12)代表总共20位,小数占其中的12位。

    精确度从小到大为:FLOAT < DOUBLE < DECIMAL。

  • 字符型:

    类型大小用途
    CHAR0-255 bytes定长字符串,超过宽度报错,不足用空格补全,显示时会去除这些空格
    VARCHAR0-65535 bytes变长字符串,超过宽度报错,不足宽度,有几个存几个
    TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
    TINYTEXT0-255 bytes短文本字符串
    BLOB0-65 535 bytes二进制形式的长文本数据
    TEXT0-65 535 bytes长文本数据
    MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
    MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
    LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
    LONGTEXT0-4 294 967 295 bytes极大文本数据
  • 日期和时间类型:

    类型大小范围格式用途
    DATE3 bytes1000-01-01/9999-12-31YYYY-MM-DD日期值
    TIME3 bytes‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
    YEAR1 bytes1901/2155YYYY年份值
    DATETIME8 bytes1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
    TIMESTAMP4 bytes1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳
  • 枚举类型和集合类型:

    类型格式用途
    ENUMENUM(选项a,选项b,选项c,选项d)多选一
    SETSET(选项a,选项b,选项c,选项d)多选多

    只能写括号中的选项,不能写括号里没有的

二、约束条件

  • 约束条件的概念:

    约束条件是在创建表时,对字段的值的一些限制,比如:字段的值能否为空、是否允许重复等。
    约束条件可以写多个。

  • 常见的约束条件:

    • NOT NULL:

      该字段的值不能为空。

    • UNSIGNED:

      无符号,按照正数处理。

    • ZAROFILL:

      用0填充不足显示宽度的位数。如,显示宽度为8,数值为123,则显示:00000123

    • DEFAULT:

      设置字段的默认值,比如默认18岁:age TINYINT DEFAULT 18

    • UNIQUE:

      • 单列唯一:该列不允许出现重复的值,直接写在字段的后面;
      • 联合唯一:多个字段的值,形成的组合不能重复;写法为:在所有字段定义的最后面单独写上UNIQUE(字段名,字段名……)
    • AUTO_INCREMENT:

      使整数类型的字段值自动增长,每次插入记录时,都在上一个值的基础上加1,然后自动保存到表中,默认从1开始。

      **自增的字段只会一直增加,不会回退。**比如,最后一个记录的自增字段值为3,即便将其删除,下次添加记录时,依旧会取3的下一个值,也就是4。

      使用TRUNCATE 表名可以清空表并重置主键。

      一张表只能有一个自增长列,通常只用于主键

    • PRIMARY KEY:

      主键约束,效果等价于NOT NULL+UNIQUE,用来设置主键。主键是一个列或者列的组合,其值能唯一地标识表中的每一行。

      如果不手动设置主键,InnoDB会按字段定义顺序,找第一个非空且唯一的字段作为主键,若果找不到,会自动创建一个隐藏的主键(无法使用,也不能提高查询速度)。

      联合主键:使用多个字段的组合作为主键,在所有字段定义的最后面单独写上PRIMARY KEY(字段名,字段名……)

    • FOREIGN KEY:

      外键约束。用于在多表关联时,建立关系,比较复杂,在下一篇详细解释。

下一篇

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值