mysql中的外键
1.默认的外键存在之后,会对数据进行约束。
1)约束1:如果子表中添加的数据,外键字段对应的数据如果在父表中不存在,那么添加失败。
有数据之后:
修改:可以修改跟外键不相关的任何字段,但是外键字段不能修改(不能修改成一个主表中不存在的值)
2)约束2:父表不能删除(或者修改)一个被子表引用的数据记录
3.外键约束
默认的用户所能看到的约束都是外键的一种约束:严格模式
外键约束其实有三种模式:都是在约束父表
严格模式:restrict(默认的),父表不能删除也不能更新(如果被子表引用)
置空模式:set null,如果父表删除,那么子表中对应的关联的外键就会被置空(set null)
级联模式:cascade,如果父表更新,那么子表对应的全部变成最新的;如果父表删除,那么子表跟着被删除。(父变子变,父删子删)
动作约束:删除约束(on delete)和更新约束(on update)
常用的约束:on delete set null on update cascade(删除父表记录,子表置空;更新父表记录,子表级联更新)
更新父表的主键
删除父表记录
4.外键条件
要使用外键,表存储引擎必须是innodb
外键若要使用置空模式,前提是子表的外键字段允许为空
外键字段的数据类型必须严格的与父表主键的数据类型一致