3. Mysql数据类型与约束

115 阅读3分钟

数据类型

数字类型

  1. 整数类型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

    数据类型字节数取值范围
    TINYINT10 - 225
    SMALLINT20 - 65 535
    MEDIUMINT30 - 16 777 215
    INT4
    BIGINT8
  2. 浮点数类型:FLOAT, DOUBLE

    数据类型字节数
    FLOAT4
    DOUBLE8

tip:浮点数类型取值范围很大,但精度并不高,FLOAT的精度为6或7位,DOUBLE的精度为15位,如果超出精度,可能会导致给定的数值与实际保存的数值不一致,发生精度损失

时间和日期类型

  1. 日期:YEAR, DATE, DATETIME

  2. 时间:TIME, TIMESTAMP

    数据类型格式取值范围零值
    YEARYYYY1901 - 21550000
    DATEYYYY-MM-DD1000-01-01 ~ 9999-12-30000-00-00
    TIMEHH:MM:SS-838:59:59 ~ 838:59:5900:00:00
    DATETIMEYYYY-MM-DD HH:MM:SS0000-00-00 00:00:00
    TIMESTAMPYYYY-MM-DD HH:MM:SS0000-00-00 00:00:00

在mysql中,TIMESTAMP字段会默认设置属性NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

NOT NULL 表示非空约束,该字段将不允许保存NULL值 DEFAULT 表示默认约束,当字段无任何输入时,自动设置某个值作为默认值 CURRENT_TIMESTAMP 表示使用系统当前日期和时间 ON UPDATE 记录其他字段被UPDATE语句修改时自动更改改字段的某个值

字符串类型

数据类型说明
CHAR固定长度字符串
VARCHAR可变长度字符串
TEXT大文本数据
ENUM枚举类型
SET字符串对象
BINARY固定长度的二进制数据
VARBINARY可变长度的二进制数据
BLOB二进制大对象

ENUM 类型每次只能从枚举列表中取一个值,而 SET 可以取多个,多个值间用逗号分割 ENUM 类似单选框,SET 类似多选框

# ENUM 枚举类型
创建表:CREATE TABLE my_ENUM (gender ENUM('one', 'two'))
插入:INSERT INTO my_ENUM VALUES ('one'), ('two')

表约束

  1. 五种约束:默认约束, 非空约束, 主键约束, 唯一约束, 外键约束

默认约束

语法:字段名 数据类型 DEFAULT 默认值

默认约束用于为数据表中的字段指定默认值,即当在表中插入一条新记录没有给字段赋值时,会自动为这个字段插入默认值,通过关键字 DEFAULT 定义

非空约束

语法:字段名 数据类型 NOT NULL

非空约束指的是字段的值不能为NULL, 通过关键字NOT NULL定义

主键约束

顶级约束:字段名 数据类型 PRIMARY KEY 表级约束:PRIMARY KEY (字段1,字段2)

主键约束要求被约束的字段不允许重复,也不能出现NULL值,每个表最多值允许含有一个主键,通过PRIMARY KEY定义

唯一约束

顶级约束:字段名 数据类型 UNIQUE 表级约束:UNIQUE (字段1, 字段221111)

唯一约束用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,通过 UNIQUE 定义

自动增长

语法:字段名 数据类型 AUTO_INCREMENT

  1. 一个表中只能有一个自动增长字段,该字段的数据类型是整数类型,且必须定义为键 (UNIQUE KEY, PRIMARY KEY)
  2. 自动增长值从1开始自增
  3. 使用DELETE 删除记录时,自动增长值不会减小或填补空缺
  4. 若为自动增长插入一个具体值时,则不会使用自动增长值