数据库基础篇-外键的使用 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