如果缺少外键,则自动添加数据

时间:2013-06-29 16:59:46

标签: c# mysql automation foreign-keys

我在MySQL中有两个表,让我们说:

产品

id (unique)
name

购买

id (unique)
fk_productid (references Product.id)
buyerName

我正在使用InnoDB并创建了从purchases.fk_productidproduct.id的外键。

假设到目前为止我们没有表中的产品且没有购买。现在有人购买了ID为10的产品,如果我只是尝试这个查询就会导致失败:

  

INSERT INTO购买(fk_productid,buyerName)VALUES(10,“Andreas”)


我还能做什么来插入购买?我可以想到两件事:

  1. 将NULL添加为fk_productid,但如果查询失败,我该如何直接在查询中执行此操作?

  2. product表格中添加一个dumy条目,但我该怎么做?如何自动添加

    INSERT INTO products (id, name) VALUES (10, "???")
    
  3. 在另一个查询之前?

    这应该用触发器,程序来完成,还是有更简单的方法我不知道?

2 个答案:

答案 0 :(得分:1)

嗯,首先我会说你可能更安全地拒绝订单并告诉用户回来,因为在验证购买之前你应该在产品表中检查库存,价格等。< / p>

无论如何,这应该可以解决您当前的问题:

INSERT IGNORE INTO products (id, name, isDummy) VALUES (10, "TBD", 1); // does nothing if product id 10 already exists
INSERT INTO purchases (fk_productid, buyerName) VALUES (10, "Andreas");

答案 1 :(得分:0)

我决定采用这个解决方案:

  

INSERT INTO购买(fk_productid,buyerName)VALUES((SELECT id FROM product WHERE id = 10 LIMIT 1),“Andreas”);

我同意在生产中这种情况永远不会发生 - 不要担心,它不会。这更像是对我遇到的更大问题的简单描述。 ; - )

感谢你之前的想法!