时间:2021-01-17来源:www.pcxitongcheng.com作者:电脑系统城
在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。
外键的使用条件:
1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;
语法一:后续添加方法
1 2 |
alter table 表名 add constraint 约束名 foreign key (当前表中约束的字段) references 主表表名(要约束的字段名); alter table student add constraint fk_class_student foreign key (cls_id) class(cls_id) on update cascade on delete no action ; |
语法二:创建表的方法
1 2 3 4 5 6 |
CREATE TABLE student( sid int PRIMARY KEY , cls_id int not null , sname varchar (10) not null , constraint fk_class_student foreign key (cls_id) references class(cls_id) on update cascade on delete no action )ENGINE=InnoDB DEFAULT CHARSET=utf8; |
一个额外点:
1 | SHOW CREATE TABLE class |
可以查询表的建表信息
1 2 3 4 5 |
CREATE TABLE `class` ( `cls_id` int NOT NULL , `cls_name` varchar (15) NOT NULL , PRIMARY KEY (`cls_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
下面的演示我们就使用刚刚创建的这个学生表和班级表
内容如下
在父表上进行update/delete操作时,子表的操作类型
以我们刚刚设置的外键为例(on update cascade on delete no action)
当我们尝试进行删除操作时
1 | delete from class WHERE cls_id=1 |
结果如下
可以看到由于外键约束中on delete no action的存在,不允许对主表进行删除操作。但是子表可以
1 | delete from student WHERE cls_id=1 |
当我们对父表的关联键进行更新操作时,由于on update cascade的存在,可以正常更新
1 | UPDATE class set cls_id=4 where cls_id=1 |
并且随着主表的更新,子表中的外键字段也进行了更新
1 2 |
alter table 子表名 drop foreign key 外键约束名 alter table student drop foreign key fk_class_student |
当我们将外键删除之后,父表的操作就变得可以正常进行了
到此这篇关于MySQL中外键创建、约束以及删除的文章就介绍到这了
2023-10-30
windows上的mysql服务突然消失提示10061 Unkonwn error问题及解决方案2023-10-30
MySQL非常重要的日志bin log详解2023-10-30
详解MySQL事务日志redo log一、单表查询 1、排序 2、聚合函数 3、分组 4、limit 二、SQL约束 1、主键约束 2、非空约束 3、唯一约束 4、外键约束 5、默认值 三、多表查询 1、内连接 1)隐式内连接: 2)显式内连接: 2、外连接 1)左外连接 2)右外连接 四...
2023-10-30
Mysql删除表重复数据 表里存在唯一主键 没有主键时删除重复数据 Mysql删除表中重复数据并保留一条 准备一张表 用的是mysql8 大家自行更改 创建表并添加四条相同的数据...
2023-10-30