所以我一次又一次地尝试将列作为外键但是它给了我Constraint名称错误?我应该放什么约束名?我正在使用PHPmyadmin SQL,我尝试给它命名如trackid等,但我仍然收到错误
ALTER TABLE `ss_ordered_carts`
ADD CONSTRAINT `track_id` FOREIGN KEY (`track_id`)
REFERENCES `ProjectDatabase`.`ss_orders` (`track_id`)
ON DELETE RESTRICT ON UPDATE CASCADE;
MySQL说:文档
projectdatabase
。
'#sql-1414_6c7'>,CONSTRAINT track_id
FOREIGN KEY(track_id
)REF
ERENCES ss_orders
(track_id
)ON UPDATE CASCADE)
答案 0 :(得分:0)
如果在子表中有引用列字段的数据,则在该字段上添加外键,
alter
添加foreign key
。第1步:禁用外键检查。
set foreign_key_checks=0;
第2步:现在添加外键约束。
ALTER TABLE `ss_ordered_carts`
ADD CONSTRAINT `track_id` FOREIGN KEY (`track_id`)
REFERENCES `ProjectDatabase`.`ss_orders` (`track_id`)
ON DELETE RESTRICT ON UPDATE CASCADE;
第3步:现在重置外键检查。
set foreign_key_checks=1;
答案 1 :(得分:0)
您可能会在表ss_ordered_carts
中填充错误的数据,这些数据无法相关。使用此查询检查它 -
SELECT * FROM ss_ordered_carts t1
LEFT JOIN ss_orders t2
ON t1.track_id = t2.track_id
WHERE
t2.track_id IS NULL;
然后修改表的数据,然后创建外键。
答案 2 :(得分:0)
试试这个。
mysql> SET foreign_key_checks = 0;
mysql> ALTER TABLE ss_ordered_carts
ADD CONSTRAINT track_id
FOREIGN KEY(track_id)
REFERENCES ss_orders(track_id)
mysql> SET foreign_key_checks = 1;
可能是,由于表中存在数据,您将收到指定的错误。
如果子表包含一些不在父表中的外键的数据,也可能发生这种情况。在这种情况下试试,
Delete from child where child_id NOT IN (select parent_id from parent where parent.id = child.id)