约束: 保证数据的一致性和完整性
约束分为(约束所针对的字段的多少决定): 表级约束和列级约束
约束类型: NOT NULL(非空约束); PRIMARY KEY(主键约束); UNIQUE KEY(唯一约束); DEFAULT(默认约束); FOREIGN KEY (外键约束)
1. 外键约束:
(1)作用:保证数据一致性、完整性;实现数据表的一对一或一对多关系
(2)要求:父表与子表必须使用相同的存储引擎,且禁止使用临时表;
数据表的存储引擎只能为InnoDB;
外键列和参照列必须具有相似的数据类型,其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同;
外键列和参照列必须创建索引,如果外键列不存在索引的话,MySQL将自动创建索引。(主键创建的时候自动创建索引)
(3)子表: 具有外键列的表;父表:子表所参照的表
(4)编辑数据表的默认存储引擎:MySQL配置文件: default-storage-engine=INNODB,重启;
查看存储引擎: mysql> SHOW ENGINES; 或者 SHOW CREATE TABLE tbl_name;
(5) 针对于外键约束的参照操作:(在进行了外键创建以后,在更新表的时候,子表是否也进行相应的操作)
CASCADE: 从父表删除或更新记录时,同时也删除或更新子表中的相应的行
(必须先在父表中插入记录,然后才能在子表中插入记录)
SET NULL:从父表中删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
RESTRICT: 拒绝对父表的删除或更新操作
NO ACTION: 标准SQL的关键字,在MySQL中与RESTRICT相同
实际开发中很少使用物理的外键约束,很多都使用逻辑的外键约束。因为物理外键约束只有innodb引擎支持。
所谓逻辑外键,是指在定义两张表的结构时,按照存在着某种结构的方式去定义,但是不去使用FOREIGN KEY这个关键词来定义。
[参考链接] https://www.imooc.com/learn/122