当前位置:   article > 正文

MySQL_外键策略_mysql外键更新和删除策略

mysql外键更新和删除策略

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

        策略1:NO ACTION,通过操作SQL完成
        策略2:CASCADE 级联操作:操作主表时影响从表的外键信息
        策略3:SET NULL 置空操作:将从表信息更新为NULL(相比于策略2更稳)
注意:策略2-3可混用,如ON UPDATE CASCADE ON DELETE SET NULL

  1. -- 从表数据依赖于主表,当有外键约束,直接删除从表会引起报错,故先删主表,再删从表
  2. /*外键策略
  3. 策略1:NO ACTION,通过操作SQL完成
  4. 策略2:CASCADE 级联操作:操作主表时影响从表的外键信息
  5. 策略3:SET NULL 置空操作:将从表信息更新为NULL(相比于策略2更稳)
  6. 注意:策略2-3可混用,如ON UPDATE CASCADE ON DELETE SET NULL
  7. */
  8. -- 查看表中数据
  9. SELECT * FROM t_students_1;
  10. -- 策略1:先修改从表中信息,再删除主表
  11. UPDATE t_students_1 set classn = NULL
  12. WHERE age = 20;
  13. DELETE FROM t_class
  14. WHERE class = 4;
  15. -- 策略2:更新其中主表外键信息,从表关联项跟着改变
  16. -- 先删除原有外键信息
  17. ALTER TABLE t_students_1 DROP FOREIGN KEY fk_stus1_classn;
  18. -- 再重新添加外键约束,并定义级联操作
  19. ALTER TABLE t_students_1 ADD
  20. CONSTRAINT fk_stus1_classn FOREIGN KEY(classn) REFERENCES t_class(cnu)
  21. ON UPDATE CASCADE ON DELETE CASCADE;
  22. -- 尝试更新数据(此时可行)
  23. UPDATE t_class set class = 6
  24. WHERE class = 4;
  25. -- 尝试删除数据(此时可行)
  26. DELETE FROM t_class WHERE class = 6;
  27. -- 策略3:置空操作
  28. -- 先删除原有外键信息
  29. ALTER TABLE t_students_1 DROP FOREIGN KEY fk_stus1_classn;
  30. -- 再重新添加外键约束,并定义级联操作
  31. ALTER TABLE t_students_1 ADD
  32. CONSTRAINT fk_stus1_classn FOREIGN KEY(classn) REFERENCES t_class(cnu)
  33. ON UPDATE SET NULL ON DELETE SET NULL;
  34. -- 尝试更新数据(此时可行)
  35. UPDATE t_class set class = 6
  36. WHERE class = 4;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/432434
推荐阅读
相关标签
  

闽ICP备14008679号