因此,我一次又一次地尝试将列作为外键,但它给了我约束名错误?我应该设置什么约束名?我正在使用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'>,约束track_id外键(track_id)参考
更新级联的ERENCES ss_orders (track_id) )发布于 2014-02-13 11:46:23
如果在子表中有引用列字段的数据,则要在该字段中添加外键,
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;发布于 2014-02-13 11:48:34
您的表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;然后修改表的数据,然后创建外键。
发布于 2014-02-13 11:53:14
尝尝这个。
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) https://stackoverflow.com/questions/21753209
复制相似问题