数据库基础篇-外键的使用 Cannot add foreign key constraint
数据库的基础篇学到尾声了,关于约束和外键约束的理解,对一个数据库入门的人来说,非常重要。
约束
- 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
- 目的:保证数据库中数据的正确、有效性和完整性。
- 分类
注意:约束是作用于表中字段上的,可以在创建表/修改表的时间添加的。
例如:
create table userinfo ( id int primary key auto_increment comment '主键', name varchar(10) not null unique comment '姓名', status char(1) default '1' comment '状态', gender char(1) comment '性别' ) comment '用户表';
外键约束
外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
- 语法
create table 表名(
字段名 数据类型,
......
[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名);
例如:
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);
很不幸,爆出错误 “Cannot add foreign key constraint"。
问题分析:
- 主表与从表的外键字段类型是否保持一致 desc table 表名
- 主表与从表的外键字段编码是否保持一致,比如utf-8
- 主表与从表的外键字段存储引擎是否保持一致
- 通常主表字段要设置成主键,没有设置成主键,没有办法使用外键命令的。
最后,通过排除问题,发现是主表dept没有id没有设置成primary key
alter table dept modify id int primary key ; alter table emp add foreign key(dept_id) references dept(id);
看似很简单的问题,细节没有掌握到位,导致没有成功做好外键的配置。
============================================================================================
1.02365约等于1377.4082,每天学一点点,笨鸟也可以飞起来。
本文来自博客园,作者:大海之星,转载请注明原文链接:https://i.cnblogs.com/posts/signatures
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!