mysql外键约束

概念

外键是我们经常使用的数据库约束方式。它保证了子表上的特定索引列取值一定与父表列(主键列)相一致对应。而且保证在子表没有对应子记录的情况下,父表数据才能删除。应该说,外键是实现数据库完整性、消除潜在脏数据风险的重要手段。

 

在使用外键的时候,我们经常会要求在子表外键列上建立索引。


如下图,在admin表里建立外键,并设置参考(phpmyadmin里叫做链接到)表的字段为 删除时 NO ACTION时,是指

当参考(链接到)的表发生删除操作时,如果admin表存在和user表里字段相等的记录,则禁止参考的表进行删除操作。

但如果是删除admin表里的记录,user表如果没有对应约束的话,则会删除admin里的记录,user表里的记录不受影响

其关系类似父子关系,外键参考的表属于父亲,当前外键的表属于孩子,删除时孩子不会对父亲产生影响。

另外,当更新(ON UPDATE)约束如果没有设置时,默认为RESTRICT(phpmyadmin不显示),如果想在admin表里直接插入一条user里没有记录的记录,则会提示“can not add or delete a child row”错误,即当添加数据时,参考的表里必须有对应的记录才可操作。


从以上关系可以推断出 外键约束 不能双向约束,只能单向,比如,如果想实现user表里删除记录时对应删除admin表,同时删除admin表记录时对应删除user表中的记录,是不可能的

使用

一个表里多个字段对参考表里同一字段建立外键关联貌似不可用

外键的使用有利有弊,好处是可以减轻数据库垃圾的产生,弊端是需要特定数据库支持,带来移植不便,再就是一些确实需要约束的关联不能简单的通过mysql自己实现,必须要在业务上进行提示处理,比如删除一个栏目时,栏目下的文章不能简单的通过外键约束全部删除,必须要手动处理。

转载于:https://my.oschina.net/assange/blog/418984

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值