2010-09-16 127 views
2

我不需要这个错误来解决。我只需要明白它的意思,所以我可以自己来处理它。mysql - 这个错误是什么意思?

Cannot add or update a child row: a foreign key constraint fails 
    (`db`.`transaction`, CONSTRAINT `transaction_ibfk_2` 
    FOREIGN KEY (`product_id`) REFERENCES `product` (`id`)) 

INSERT INTO `transaction` (`client_id`, `cost`, `website_id`, `product_id`, 
    `template_number`, `value`, `order_id`) 
    VALUES ('17', '', '2480', '', '', '12', '1'); 

什么是外键?它是如何设置的?

CONSTRAINT transaction_ibfk_2是什么意思?

这是否意味着我需要一个名为transaction_ibfk_2的表?

谢谢。

+1

我建议你Google'外键'并先做一些阅读。 – Brissles 2010-09-16 09:51:12

回答

0

要插入(列表中的项目四)一个空字符串作为productid

INSERT INTO transaction 
(client_id, cost, website_id, product_id, template_number, value, order_id) 
VALUES ('17', '', '2480', '', '', '12', '1') 

有一个参照完整性约束成立,以确保您只能插入productid小号匹配一个被引用product表。

0

这意味着您试图将值添加到外键列中,该列在引用列中不可用或试图在外键列中添加空白。 即您试图将product_id添加为不允许的空白。外键列中的所有值都必须是主引用列标识中存在的有效值。

0

约束名称和表格之间并不一定有关系,尽管大多数人会恰当地命名它们以使他们的生活更轻松。

这一切意味着你有一个transaction_ibfk_2约束。实际的问题是在消息的其余部分:

FOREIGN KEY (product_id) REFERENCES product (id) 

你需要插入一行到您的product榜第一。你插入的id应该是product_id你试图插入transaction(这是''由于某种原因 - 我非常确定这应该是一个真正的价值(或可能为NULL))。

您可以使用create tablealter table DDL语句的子句创建外键。