数据库基础篇-外键的使用 Cannot add foreign key constraint

 

   数据库的基础篇学到尾声了,关于约束和外键约束的理解,对一个数据库入门的人来说,非常重要。

 约束

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
  2. 目的:保证数据库中数据的正确、有效性和完整性
  3. 分类

 

    注意:约束是作用于表中字段上的,可以在创建表/修改表的时间添加的。

   例如:

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,每天学一点点,笨鸟也可以飞起来。

 

posted @ 2022-05-11 23:10  大海之星  阅读(388)  评论(0编辑  收藏  举报