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

本文关键字:添加 数据 如果 | 更新日期: 2023-09-27 18:20:19

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

产品

id (unique)
name

购买

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

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

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

插入采购(fk_productid,买方名称)价值(10,"Andreas")


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

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

  2. 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");

我同意,在生产中,这种情况永远不应该发生——别担心,不会的。这更像是对我遇到的一个更大问题的简单描述

谢谢你之前的想法!