mysql,创建DB时,报错:1822 - Failed to add the foreign key constraint. Missing index for constraint 'tb_emp_ibfk_1' in the referenced table 'tb_dept'
原因:表A如果没有设置主键,那么表A里面的字段是不能作为表B的外键的。
解决方案,在不想删除表A的前提下,增加以下sql文即可:
ALTER TABLE tb_dept ADD PRIMARY KEY(deptno);
sql文:
DROP DATABASE IF EXISTS tb_test;
CREATE DATABASE tb_test DEFAULT charset utf8;
USE tb_test;
# 部门表
CREATE TABLE tb_dept (
deptno INT NOT NULL COMMENT '编号',
deptname VARCHAR ( 10 ) NOT NULL COMMENT '名称',
deptaddr VARCHAR ( 20 ) NOT NULL COMMENT '地址'
);
INSERT INTO tb_dept VALUES
( 101, '研发部门', '武汉' ),
( 127, '会计部门', '上海' );
# 员工表
DROP TABLE IF EXISTS tb_emp;
CREATE TABLE tb_emp (
empno INT NOT NULL COMMENT '编号',
empname VARCHAR ( 10 ) NOT NULL COMMENT '姓名',
empjob VARCHAR ( 10 ) NOT NULL COMMENT '职位',
empsal INT NOT NULL DEFAULT 3000 COMMENT '薪酬',
deptno INT NOT NULL COMMENT '所属部门',
PRIMARY KEY ( empno ),
FOREIGN KEY ( deptno ) REFERENCES tb_dept ( deptno )
);
INSERT INTO tb_emp VALUES
(10001,'杨过','研发主管',2000000,101),
(40001,'张三丰','总裁',90000000,127);
运行结果:
DROP DATABASE IF EXISTS tb_test
> OK
> 时间: 0.32s
CREATE DATABASE tb_test DEFAULT charset utf8
> OK
> 时间: 0.991s
USE tb_test
> OK
> 时间: 0.008s
# 部门表
CREATE TABLE tb_dept (
deptno INT NOT NULL COMMENT '编号',
deptname VARCHAR ( 10 ) NOT NULL COMMENT '名称',
deptaddr VARCHAR ( 20 ) NOT NULL COMMENT '地址'
)
> OK
> 时间: 1.74s
INSERT INTO tb_dept VALUES
( 101, '研发部门', '武汉' ),
( 127, '会计部门', '上海' )
> Affected rows: 2
> 时间: 0.532s
# 员工表
DROP TABLE IF EXISTS tb_emp
> OK
> 时间: 0.393s
CREATE TABLE tb_emp (
empno INT NOT NULL COMMENT '编号',
empname VARCHAR ( 10 ) NOT NULL COMMENT '姓名',
empjob VARCHAR ( 10 ) NOT NULL COMMENT '职位',
empsal INT NOT NULL DEFAULT 3000 COMMENT '薪酬',
deptno INT NOT NULL COMMENT '所属部门',
PRIMARY KEY ( empno ),
FOREIGN KEY ( deptno ) REFERENCES tb_dept ( deptno )
)
> 1822 - Failed to add the foreign key constraint. Missing index for constraint 'tb_emp_ibfk_1' in the referenced table 'tb_dept'
> 时间: 0.034s