MySQL_外键策略

       关系型数据库中表之间存在约束关系,因此在对两表存在关联的数据进行更新删除操作时,会报错。可采用以下三种策略操作:

        策略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;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值