什么时候利用外键?
外键约束:利用了外键之后,那么对外键指向的表就会产生很多约束,编削
表与表之间是有联系的,如何证明这种联系呢?利用外键。
外键的利用
包括在建立表的时候指定外键,以及在创建表之后修正表构造增加外键
语法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.约束时父表删除子表置空:子表的字段许可为空