MySQL-字段约束

Author Avatar
丁起男 12月 16,2020
  • 在其它设备中阅读本文章

MySQL-字段约束

约束保证了数据的完整性和一致性

约束分为表级约束和列级约束

unsigned(无符号)

该属性只能用于设置数值类型,不允许数据列出现负数

如果不需要向某字段中插入负数,则使用该属性修饰符可以使该字段的最大存储长度增加一倍

例如,正常情况下数据类型tinyint的数值范围在-128~127,而使用unsigned属性修饰以后最小值为0,最大值为255

zerofill(填充零)

该属性只能用于设置数值类型,在数值之前自动用0补齐不足的位数

例如,将5插入一个声明为int(3) zerfill的字段,之后查询输出时,输出的数据将是“005”

当给一个字段使用zerofill修饰时,该字段自动应用unsigned属性

auto_increment(自增)

该属性用于设置字段的自动递增属性,当数值类型的字段设置为自动增量时,每增加一条新纪录,该字段的值就自动加1,而且此字段的值不允许重复

此修饰符只能修饰整数类型的字段

插入新纪录时自增字段可以为default、null,0或空,这时自增字段会使用上次字段的值加1,作为此次的值

插入时也可以为自增字段指定一个非零的值,这时,如果表中已经存在此值将出错;否则使用指定数值作为自增字段的值,并且下次插入时,下个字段的值将在此值的基础上加1

null和not null(是否为null)

默认为null,即没有在此字段插入值

如果指定了not null,则必须在此字段插入值

default(默认值)

可以通过此属性来指定一个默认值,如果没有在此列添加值,那么默认添加此值

例如,在用户表users中,可以将性别字段的默认值设置为“男”。在为该列茶树数据时,只在当前用户为“女”时才需要指定,否则可以不为该字段设定值,默认值就为“男”

primary key(主键约束)

每张数据表中只能存在一个主键

主键保证纪录的唯一性

主键自动为not null

auto_increment必须和primary key一起使用,但primary key不需要

unique key(唯一)

唯一约束可以保证纪录的唯一性

唯一约束的字段可以为空值(null),只有不为null时才会判断是否唯一

每张表可以存在多个唯一约束

foreign key(外键约束)

保持数据一致性,完整性

实现一对一或一对多关系

使用references关键字进行关联

要求

父表和子表必须使用相同的存储引擎,而且禁止使用临时表

数据表的存储引擎只能为InnoDB

外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同

外键列必须创建索引。如果外键列不存在索引的话,mysql将自动创建索引

查看索引

show index from tab_name

参照操作

on update|delete [cascade|set null|restrict|no action]

可以设置多个

  • cascade:从父表删除或更新且自动删除或更新子表中匹配的行

  • set null:从父表删除或更新行,并设置子表中的外键列为null(字段不能设置为 not null)

  • restrict:拒绝对附表的删除或更新操作

  • no action:标准sql的关键字,在MySQL中与restrict相同