Mysql外键

时间:2014-02-13 11:41:53

标签: php mysql

所以我一次又一次地尝试将列作为外键但是它给了我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说:文档

  • 1452 - 无法添加或更新子行:外键约束失败(projectdatabase

    '#sql-1414_6c7'>,CONSTRAINT track_id FOREIGN KEY(track_id)REF

    ERENCES ss_orderstrack_id)ON UPDATE CASCADE)

3 个答案:

答案 0 :(得分:0)

如果在子表中有引用列字段的数据,则在该字段上添加外键,

  1. 首先必须禁用外键检查。
  2. 然后alter添加foreign key
  3. 最后重置约束检查。
  4. 第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)