<BR> 1822错误添加外键约束失败引用表“ instructor”中约束“ student_ibfk_2”的缺少索引

问题描述

create database stmikglobal;
use stmikglobal;

create table depart(
    dept_name varchar(20) primary key,building varchar(20),budget float(15,2)
);

create table instructor(
    instruc_id int not null auto_increment primary key,ka_dept_name varchar(20),ins_name varchar(30) not null,salary int,foreign key (ka_dept_name) references depart (dept_name)
    );
    
    
    
create table student(
    id_stu int not null auto_increment primary key,ka_dept_name varchar (20),ka_ins_name varchar(30),full_name varchar(35),total_credits int,foreign key (ka_dept_name) references depart(dept_name),foreign key (ka_ins_name) references instructor(ins_name)
    );

为什么我要在表部分执行文件有问题?

解决方法

您应该通过其主键(instructor)来引用instruc_id表,而不要通过其他列(在这里,您使用ins_name)来引用。因此,如下更改列名,数据类型和外键声明:

create table student(
    id_stu int not null auto_increment primary key,ka_dept_name varchar (20),ka_instruc_id int,full_name varchar(35),total_credits int,foreign key (ka_dept_name) references depart(dept_name),foreign key (ka_instruc_id) references instructor(instruc_id)
);