首页
学习
活动
专区
圈层
工具
发布

问Mysql外键
EN

Stack Overflow用户
提问于 2014-02-13 11:41:53
回答 3查看 101关注 0票数 0

因此,我一次又一次地尝试将列作为外键,但它给了我约束名错误?我应该设置什么约束名?我正在使用PHPmyadmin SQL,我尝试给它命名,例如trackid等等,但是我仍然得到了一个错误

代码语言:javascript
复制
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'>,约束track_id外键(track_id)参考 更新级联的ERENCES ss_orders (track_id) )
EN

回答 3

Stack Overflow用户

发布于 2014-02-13 11:46:23

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

  1. 首先,您必须禁用外键检查。
  2. 然后alter添加foreign key。
  3. 最后,重置约束检查。

步骤1:禁用外键检查。

代码语言:javascript
复制
set foreign_key_checks=0;

步骤2:现在添加外键约束。

代码语言:javascript
复制
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:现在重置外键检查。

代码语言:javascript
复制
set foreign_key_checks=1;
票数 0
EN

Stack Overflow用户

发布于 2014-02-13 11:48:34

您的表ss_ordered_carts中可能填充了错误的数据,这些数据是不相关的。用这个查询来检查它-

代码语言:javascript
复制
SELECT * FROM ss_ordered_carts t1
  LEFT JOIN ss_orders t2
    ON t1.track_id = t2.track_id
WHERE
  t2.track_id IS NULL;

然后修改表的数据,然后创建外键。

票数 0
EN

Stack Overflow用户

发布于 2014-02-13 11:53:14

尝尝这个。

代码语言:javascript
复制
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;

可能是,当表中存在数据时,您将得到指定的错误。

如果子表包含一些不包含在父表中的外键的数据,也可能发生这种情况。在这种情况下,

代码语言:javascript
复制
Delete from child where child_id NOT IN (select parent_id from parent where parent.id = child.id) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21753209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档