MySQL基础入门学习【4】约束2

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

约束分为(约束所针对的字段的多少决定): 表级约束和列级约束

约束类型: 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;

MySQL基础入门学习【4】约束2

MySQL基础入门学习【4】约束2

MySQL基础入门学习【4】约束2

(5) 针对于外键约束的参照操作:(在进行了外键创建以后,在更新表的时候,子表是否也进行相应的操作)

CASCADE: 从父表删除或更新记录时,同时也删除或更新子表中的相应的行

MySQL基础入门学习【4】约束2

(必须先在父表中插入记录,然后才能在子表中插入记录)

MySQL基础入门学习【4】约束2

MySQL基础入门学习【4】约束2

MySQL基础入门学习【4】约束2

SET NULL:从父表中删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL

RESTRICT: 拒绝对父表的删除或更新操作

NO ACTION: 标准SQL的关键字,在MySQL中与RESTRICT相同

实际开发中很少使用物理的外键约束,很多都使用逻辑的外键约束。因为物理外键约束只有innodb引擎支持。

所谓逻辑外键,是指在定义两张表的结构时,按照存在着某种结构的方式去定义,但是不去使用FOREIGN KEY这个关键词来定义。

[参考链接]   https://www.imooc.com/learn/122