我有一个相当复杂的数据库,其中设置了许多外键关系,并且想知道是否有一种简单的方法可以将条目插入到这些表之一中。
这是保存一些外键的表。
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_field
和library_field
是这些表的条目?我也不知道如何处理这个问题,因为主表中没有其他字段是唯一的,所以如果有两个条目会发生什么...
无论如何,如果有人知道如何做类似的事情,我们将不胜感激!在 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 等情况下更轻松地处理错误。
关于php - MySQL插入语句外键自动添加pk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068777/