赞
踩
关系型数据库中表之间存在约束关系,因此在对两表存在关联的数据进行更新删除操作时,会报错。可采用以下三种策略操作:
策略1:NO ACTION,通过操作SQL完成
策略2:CASCADE 级联操作:操作主表时影响从表的外键信息
策略3:SET NULL 置空操作:将从表信息更新为NULL(相比于策略2更稳)
注意:策略2-3可混用,如ON UPDATE CASCADE ON DELETE SET NULL
- -- 从表数据依赖于主表,当有外键约束,直接删除从表会引起报错,故先删主表,再删从表
-
- /*外键策略
- 策略1:NO ACTION,通过操作SQL完成
- 策略2:CASCADE 级联操作:操作主表时影响从表的外键信息
- 策略3:SET NULL 置空操作:将从表信息更新为NULL(相比于策略2更稳)
- 注意:策略2-3可混用,如ON UPDATE CASCADE ON DELETE SET NULL
- */
-
- -- 查看表中数据
- SELECT * FROM t_students_1;
-
- -- 策略1:先修改从表中信息,再删除主表
- UPDATE t_students_1 set classn = NULL
- WHERE age = 20;
- DELETE FROM t_class
- WHERE class = 4;
-
- -- 策略2:更新其中主表外键信息,从表关联项跟着改变
- -- 先删除原有外键信息
- ALTER TABLE t_students_1 DROP FOREIGN KEY fk_stus1_classn;
- -- 再重新添加外键约束,并定义级联操作
- ALTER TABLE t_students_1 ADD
- CONSTRAINT fk_stus1_classn FOREIGN KEY(classn) REFERENCES t_class(cnu)
- ON UPDATE CASCADE ON DELETE CASCADE;
- -- 尝试更新数据(此时可行)
- UPDATE t_class set class = 6
- WHERE class = 4;
- -- 尝试删除数据(此时可行)
- DELETE FROM t_class WHERE class = 6;
-
- -- 策略3:置空操作
- -- 先删除原有外键信息
- ALTER TABLE t_students_1 DROP FOREIGN KEY fk_stus1_classn;
- -- 再重新添加外键约束,并定义级联操作
- ALTER TABLE t_students_1 ADD
- CONSTRAINT fk_stus1_classn FOREIGN KEY(classn) REFERENCES t_class(cnu)
- ON UPDATE SET NULL ON DELETE SET NULL;
- -- 尝试更新数据(此时可行)
- UPDATE t_class set class = 6
- WHERE class = 4;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。