关于外键约束的参照操作
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、是的,最后一个UPDATE和CASCADE之间应该隔开。
2、什么都不写,默认为RESTRICT,拒绝对父表的删除或更新操作。
3、是的,同学理解的不错。
4、是禁止父表更新或者删除记录。
5、不是的,如果父表中的字段在子表中不存在参照关系,就可以对父表记录进行更新和删除操作。
6、不存在,同学可以删除外键,重新创建。
7、在实际的开发中,可以使用逻辑外键的代替这种外键参照,也就是通过代码来限制表之间的关联。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星