关于外键约束的参照操作

关于外键约束的参照操作

1:

关于使用外键约束的参照操作的格式是不是这样? 在ON后面加参照操作

ALTER TABLE 子表
ADD FOREIGN KEY(外键字段) REFERENCES 父表(主键字段)
ON 外键约束的参照操作(例如 DELETE CASCADE)
ON 外键约束的参照操作(例如 UPDATECASCADE);

2:

外键约束的参照操作,如果什么都不写,默认是什么?

3:

比如我已经添加了DELETE CASCADE和UPDATE CASCADE这两个参照操作,是不是就不能添加

SET NULL或者NOT ACTION或者RESTRICT

比如:

ALTER TABLE news
ADD FOREIGN KEY(cateId) REFERENCES news_cate(id)
ON DELETE CASCADE 
ON UPDATE CASCADE
ON DELETE SET NULL
ON UPDATE SET NULL;
这样做是否是错误的?

我的理解是,删除和更新这两个操作,各自只能存在一种参照操作(CASCADE或者SET NULL),

不能出现删除后又级联又SET NULL或者更新后又级联又SET NULL

例如

ALTER TABLE news
ADD FOREIGN KEY(cateId) REFERENCES news_cate(id)
ON DELETE CASCADE 
ON UPDATE CASCADE;
ALTER TABLE news
ADD FOREIGN KEY(cateId) REFERENCES news_cate(id)
ON DELETE CASCADE 
ON UPDATE SET NULL;

请问我的理解对吗?

4:

NOT ACTION或者RESTRICT,是禁止外键的父表更新或者删除字段,还是禁止外键的父表更新或者删除记录呢?

5:

如果设置了NOT ACTION或者RESTRICT,是不是这个外键的父表就无法更新或者删除操作了?

相当于父表的字段结构或者记录就固定死了?

6:有没有方法可以删除外键约束的参照操作?而不影响外键的其他属性

7:外键参照操作在实际开发中常用吗?如果不常用的话,一般会用什么方式去代替?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

关于同学的问题,回答如下:

1、是的,最后一个UPDATE和CASCADE之间应该隔开。

2、什么都不写,默认为RESTRICT,拒绝对父表的删除或更新操作。

3、是的,同学理解的不错。

4、是禁止父表更新或者删除记录。

5、不是的,如果父表中的字段在子表中不存在参照关系,就可以对父表记录进行更新和删除操作。

6、不存在,同学可以删除外键,重新创建。

7、在实际的开发中,可以使用逻辑外键的代替这种外键参照,也就是通过代码来限制表之间的关联。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • MasonM 提问者 #1
    逻辑外键是在编写Java代码时实现吗?
    2019-05-11 19:18:26
  • 好帮手慕珊 回复 提问者 MasonM #2
    是的,在代码中实现。祝学习愉快!
    2019-05-12 12:01:13
  • MasonM 提问者 回复 好帮手慕珊 #3
    好的谢谢老师
    2019-05-12 12:12:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师