如果缺少外键,则自动添加数据
本文关键字:添加 数据 如果 | 更新日期: 2023-09-27 18:20:19
我在MySQL中有两个表,比方说:
产品
id (unique)
name
购买
id (unique)
fk_productid (references Product.id)
buyerName
我正在使用InnoDB,并创建了一个从purchases.fk_productid
到product.id
的外键。
假设到目前为止,我们没有产品在桌子上,也没有购买。现在有人购买了id为10的产品,如果我只是尝试这个查询,就会导致失败:
插入采购(fk_productid,买方名称)价值(10,"Andreas")
我该怎么做才能插入购买?我能想到两件事:
将NULL添加为
fk_productid
,但如果失败,我如何直接在查询中执行此操作?在
product
表中添加一个dumy条目,但我该怎么做呢?如何自动添加INSERT INTO products (id, name) VALUES (10, "???")
在其他查询之前?
这应该用触发器、程序来完成吗?还是有一种我不知道的更简单的方法?
首先,我想说,拒绝订单并告诉用户回来可能更安全,因为在验证购买之前,你应该在产品表中检查库存、价格等。
不管怎样,这应该能解决你眼前的问题:
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");
我决定采用这个解决方案:
插入采购(fk_productid,buyerName)值((从产品中选择id,其中id=10 LIMIT 1),"Andreas");
我同意,在生产中,这种情况永远不应该发生——别担心,不会的。这更像是对我遇到的一个更大问题的简单描述
谢谢你之前的想法!