Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法更改列并使其成为外键_Mysql - Fatal编程技术网

Mysql 无法更改列并使其成为外键

Mysql 无法更改列并使其成为外键,mysql,Mysql,我有两个表格,员工和tbl_反馈。我想做的是在tbl_反馈中添加id作为外键。我的tbl_反馈中已经有一个id列,因此我尝试使用以下方法更改它: ALTER TABLE tbl_feedback ADD FOREIGN KEY (id) REFERENCES employee(id); 当我点击go时,我只得到“不能添加外键约束”。我做错了吗 tbl_反馈 雇员 参考表必须有主键,并且主键字段不应为空 所以,如果需要,首先修改引用的表 比如说, ALTER TABLE TblReferen

我有两个表格,员工和tbl_反馈。我想做的是在tbl_反馈中添加id作为外键。我的tbl_反馈中已经有一个id列,因此我尝试使用以下方法更改它:

ALTER TABLE tbl_feedback
ADD FOREIGN KEY (id) REFERENCES employee(id);
当我点击go时,我只得到“不能添加外键约束”。我做错了吗


tbl_反馈

雇员

参考表必须有主键,并且主键字段不应为空 所以,如果需要,首先修改引用的表

比如说,

ALTER TABLE TblReference
Alter column refid int NOT NULL

ALTER TABLE TblReference
ADD constraint PK_TblReference_RefId primary key (refid)
然后简单地添加外键约束

ALTER TABLE TblSource
ADD CONSTRAINT FK_TblSource_Id FOREIGN KEY (id)   
    REFERENCES TblReference (refid)

employee.id
tbl\u feedback.id
有相同的类型吗?@PhilippMaurer是的,他们有相同的类型。我敢打赌我的午餐是
tbl\u feedback.id
tbl\u feedback
表的主键,而不是
employee
表的外键。是否有一个列,例如您应该使用的
tbl\u feedback.employee\u id
?请为这两个表提供完整的表结构(DDL)。
tbl\u feedback
中的
id
列与
employee
中的
id
列无关。这些列中的每一列只是各自表中每一行的唯一标识符。这意味着您需要添加(并填充)一个新列,然后才能应用外键约束。你能修改这些表并添加列吗?我的两个pk都不是空的。所以我做了这个
ALTER TABLE tbl\u feedback ADD CONSTRAINT tbl\u feedback外键(id)REFERENCES employee(id)
OP的
tbl\u feedback
中没有一列的值指向
employee.id
列。在添加该列(填充)之前,此答案对OP没有多大用处。当然,如果定义FK约束,则该值必须存在于引用的表列上。否则,在创建约束期间,它将失败。因此,在创建约束之前,您可以测试引用的表列中是否缺少源列中的任何值