0

我在 MySQL 中有两个表,比方说:

产品

id (unique)
name

购买

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

我正在使用 InnoDB 并从purchases.fk_productidto创建了一个外键product.id

假设到目前为止我们在表中没有产品并且没有购买。现在有人购买了 id 为 10 的产品,如果我简单地尝试这个查询,这将导致失败:

插入购买(fk_productid,buyerName)值(10,“Andreas”)


我该怎么做才能插入购买?我能想到两件事:

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

  2. 在表中添加一个虚拟条目product,但我该怎么做呢?如何自动添加

    INSERT INTO products (id, name) VALUES (10, "???")
    

在其他查询之前?

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

4

2 回答 2

1

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

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

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");
于 2013-06-29T17:16:19.383 回答
0

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

插入购买(fk_productid,buyerName)值((SELECT id FROM product WHERE id=10 LIMIT 1),“Andreas”);

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

感谢您之前的想法!

于 2013-06-29T17:47:52.763 回答