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

时间:2015-03-16 02:30:25

标签: php mysql foreign-keys primary-key sql-insert

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

这是包含一些外键的表。

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;

当设置此表时,它最终只保存两个外键和主键,这意味着这里的所有内容都是数字。这就是我想要发生的事情,但这也意味着该表的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是哪些表条目?我不确定如何处理这个问题,因为主表中没有其他字段是唯一的,所以如果有两个条目会发生什么......

无论如何,如果有人知道如何做这样的事情,将不胜感激!在MySQL内部完成所有这些工作是可取的,但我使用PHP执行此操作没有任何问题。

1 个答案:

答案 0 :(得分:2)

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

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。