我在MySQL中有两个表,让我们说:
产品
id (unique)
name
购买
id (unique)
fk_productid (references Product.id)
buyerName
我正在使用InnoDB并创建了从purchases.fk_productid
到product.id
的外键。
假设到目前为止我们没有表中的产品且没有购买。现在有人购买了ID为10的产品,如果我只是尝试这个查询就会导致失败:
INSERT INTO购买(fk_productid,buyerName)VALUES(10,“Andreas”)
我还能做什么来插入购买?我可以想到两件事:
将NULL添加为fk_productid
,但如果查询失败,我该如何直接在查询中执行此操作?
在product
表格中添加一个dumy条目,但我该怎么做?如何自动添加
INSERT INTO products (id, name) VALUES (10, "???")
在另一个查询之前?
这应该用触发器,程序来完成,还是有更简单的方法我不知道?
答案 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”);
我同意在生产中这种情况永远不会发生 - 不要担心,它不会。这更像是对我遇到的更大问题的简单描述。 ; - )
感谢你之前的想法!