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相同