约束的目的:


1、约束保证数据的完整性和一致性。


2、约束分为表级约束 和 列级 约束。(针对约束字段的数目的多少来确定的)


3、约束类型包括 not null (非空约束)


  primary key(主键约束)


  unique key(唯一约束)


  default(默认约束)


  foreign key(外键约束)


NUll,字段值可以为空


NOt Null,字段值禁止为空。 如果此字段不赋值,mysql将会报错


null/not null 限定mysql字段是否必须赋值。

auto_increment


自动编号,且必须与主键组合使用


默认情况下,起始值为1,每次增量为1。

primary key


主键约束


每张表只能存在一个主键


主键保证记录的唯一性


主键自动为NOT NULL


aouto_increment 必须和主键一块使用,但是主键不一定要和auto_increment使用


unique key


唯一约束


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


唯一约束的字段可以为空值(NULL)


每张数据表可以存在多个字段唯一约束


注: 如果多个字段唯一,且为空的话,其实只有一个为空,这样就保证了字段的唯一性。

default


默认值


当插入记录时,如果没有明确为字段赋值,则自动赋值为默认值。


foreign key


外键约束


保持数据的一致性,完整性。


实现一对一或一对多的关系。


外键约束的条件:


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


2、数据表的存储引擎只能为innoDB


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


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


写法:foreign key (列名) references 表名 (列名)

外键约束的参照操作:(了解了解)


1、cascade:当父表删除或者更新时,自动删除或更新子表的匹配行。


2、set null : 从父表删除或更新,并设置子表中的外键列为null。如果使用该项,必须保证子表列没有指定not null


3、restrict:拒绝父表的删除或更新操作。


4、no action : 标准的sql关键字,在mysql中与restrict相同。


注: 在实际开发中一般不使用 foreign key关键字 的物理 外键,一般按照结构 使用逻辑 的外键。因为物理外键 有innodb引擎限制。

表级约束与列级约束



对一个数据类建立的约束,称为列级约束。



对多个数据类建立的约束,称为表级约束。



列级约束既可以在列定义时申明,也可以在列定义后申明。


表级约束只能在列定义后申明。