mysql的常见的外键约束

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的常见的外键约束相关的知识,希望对你有一定的参考价值。

一  mysql的常见的外键约束策略

设计外键时,mysql提供了4种外键关联策略

1、RESTRICT 限制(默认)

如果有外键关联了tb_class 的id,则tb_class 不能删除被关联的记录、不能更新关联记录deptId字段的值(会报错)。

2、CASCADE 级联

删除tb_class 中的记录时,会自动删除tb_student中与之关联的记录;修改tb_class中tb_student字段的值时,会自动修改tb_student中与之关联的记录的外键字段的值(同步变化)。

3、NO ACTION 不做处理

删除、更新tb_class中的id字段的值时,tb_student中与之关联的记录不作任何处理。此种策略需要存储引擎支持,如果存储引擎不支持,会自动换为RESTRICT。

4、SET NULL 置为NULL

删除tb_student的记录,或者更新id字段的值,会自动将tb_student中与之关联的记录的外键字段的值置为NULL。

二 案例

1.新建一个tb_class 和一个tb_student表

CREATE TABLE `tb_class` (
  `id` int(11) NOT NULL,
  `class_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `tb_student` (
  `id` int(11) NOT NULL,
  `sname` varchar(255) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `cid` (`cid`),
  CONSTRAINT `tb_student_ibfk_1` FOREIGN KEY (`id`) REFERENCES `tb_class` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1.首先需要添加数据时候,修改数据,删除数据时候,都必须先把父表进行操作,直接操作子表,则报错:

2.直接删除父表,有子表的引用,不让删除

 

 

以上是关于mysql的常见的外键约束的主要内容,如果未能解决你的问题,请参考以下文章

mySQL:是啥阻止了我的外键约束?

MySQL 中的外键约束错误 1452 - Magento 导入

补12.关于mysql的外键约束

mysql的外键约束

如何在删除时处理 MySql + Laravel 中的外键约束?

truncate table时存在外键约束的解决办法