2013-08-30 18 views
0

我试图恢复一些旧的数据库表,当我构建它们时,我没有使用外键。我有与外键相对应的字段,但是我没有在关联表中将它设置为与它连接的表。在mysql表中实现外键

知道我有一个问题,因为如果我尝试添加该关系,它不能,因为在另一个表中删除了一些行。

是否有任何用于检查此类型的mysql命令NULL关系为我删除我不需要的行..并在最后..添加关系。

 
TableA 
    id, 
    name 

TableB 
    id, 
    tableA_id, 
    points 

我删除了一些TableA行..现在我不能有这种关系。

任何需要帮助的mysql命令,还是需要手动检查?

感谢

回答

1

假设你有PRIMARY KEY约束至少在TableA.id你可以尝试

-- Delete all orphaned records from TableB 
DELETE b 
    FROM tableb b LEFT JOIN tablea a 
    ON b.a_id = a.id 
WHERE a.id IS NULL; 
-- Create a FK constraint 
ALTER TABLE TableB 
ADD CONSTRAINT fk_a_id FOREIGN KEY (a_id) REFERENCES tablea(id); 

这里是SQLFiddle演示