外键
外键:Foreign key,一个表中有一个字段,指向另外一张表的 主键 。那么该字段就称之为外键。
什么时候使用外键?
外键约束:使用了外键之后,那么对外键指向的表就会产生很多约束,删改
表与表之间是有联系的,如何证明这种联系呢?使用外键。
外键的使用
包括在建立表的时候指定外键,以及在创建表之后修改表结构增加外键
语法1:在创建表时增减外键 foreign key (字段) references 表名 (字段)
查看外键
show create table 表名
外键的作用
约束了使用外键的表的数据操作:不能插入一个外键所指向的主键不存在的记录
如果要在子表插入数据,必须保证外键对应父表的主键里已经存储该对应的数据
在外键使用上有两个概念
父表:被外键所指向(引用)的表就是父表
子表:定义了外键的表就是子表
删除外键
将外键移除
因为一个表中可能出现多个外键,因此在删除外键的时候必须指定对应的外键的名字
语法:alter table 表名 drop foreign key 外键名
注意:外键要求对应的字段必须是一个 索引 ,在创建外键的时候会自动给对应的外键字段创建索引;但是删除外键时只会删除对应的外键,而不会将对应字段的索引删除。
语法2:修改表结构增加外键
语法:alter table 表名 add foreign key (字段) references 表名 (字段)
修改外键名字
要先删除外键,然后重新添加
外键名字语法: constraint 外键名 foreign key (字段) references 表名 (字段)、
注意:在添加外键名字的时候,不要对外键名添加单引号,如果非要区别,使用反引号。
外键约束
对父表和子表相应数据的操作的时候,必须要满足约束的条件之后,才能操作,否则不能操作。
外键约束规则:
1. restrict 模式,严格模式(默认),不允许父表对有约束的数据进行操作(删除和修改,对应的主键)
2.set null模式,置空模式,当父表的数据被删除的时候,子表对应的数据被设置成null
3.cascade模式,级联模式,当父表的数据被删除的时候,子表对应的数据也随之被删除。
通常,对应外键的约束规则:在更新的时候,级联操作,在删除的时候,置空(父表影响子表)
约束1:当子表插入数据的时候,必须保证父表已经存在对应的主键ID。
约束2:子表对父表的约束,父表的数据操作,如果在有子表约束的情况下(被引用),那么不能随便操作
在添加外键时需要指定约束模式
add foreign key (字段) references 表名 (字段) on update 模式[cascade] on delete 模式[set null]
1.更新父表数据
2.删除父表数据
外键约束的存在是为保证数据的一致性。
从 数据库设计 角度出发,应该尽可能的使用外键来保证数据的一致性。如果从外部应用的角度出发(PHP),很少使用外键约束
PHP:在需要使用外键的表中,增加一个字段,该字段用来保存对应的表的主键,但是不建立外键关系。
注意:
1.建立外键的前提条件:外键对应的字段类型要与指向表的主键的字段类型一致
2.约束时父表删除子表置空:子表的字段允许为空