MySQL插入语句外键自动添加pk

MySQL Insert Statement foreign key auto add pk

我有一个相当复杂的数据库设置有很多外键关系,想知道是否有一种简单的方法可以将条目插入其中一个 table。

这是保存一些外键的table。

CREATE TABLE package (
    id INT PRIMARY KEY AUTO_INCREMENT,
    master_id INT NOT NULL UNIQUE,
    library_id INT NOT NULL,
    FOREIGN KEY (master_id) REFERENCES master(id),
    FOREIGN KEY (library_id) REFERENCES library(id)
) DEFAULT CHARSET = utf8;

设置此 table 时,它最终只包含两个外键和主键,这意味着这里的所有内容都是数字。这是我想要发生的事情,但这也意味着 table 的 INSERT 语句看起来像

INSERT INTO package (master_id, library_id) VALUES (235, 12);

或类似的东西...

有没有办法发表这样的声明:

INSERT INTO package (master_id, library_id)
VALUES ([master_field], [library_field]);

其中 master_fieldlibrary_field 是那些 table 的条目?我不确定这将如何处理,因为主 table 中没有其他字段是唯一的所以如果有两个条目会发生什么...

无论如何,如果有人知道如何做这样的事情,我们将不胜感激!在 MySQL 内执行所有这些操作是可取的,但我使用 PHP.

执行此操作没有问题

您可以在 MySQL 中完成所有操作,方法是使用 SELECT 语句为 INSERT 提供值。例如:

INSERT INTO package (master_id, library_id)
SELECT (SELECT master_field FROM master_table WHERE {some condition} LIMIT 1), (SELECT library_id FROM library_table WHERE {some condition} LIMIT 1)

不过,您可能不想那样做,而是在 PHP 代码中执行单独的 SELECT 语句,这样您就可以更轻松地处理错误,例如,有没有 library_id 符合您的条件。