MySQL Insert Statement внешний ключ автоматического добавления pk

У меня довольно сложная база данных с множеством связей с внешним ключом, и я хочу знать, есть ли простой способ вставить запись в одну из этих таблиц.

Эта таблица содержит некоторые внешние ключи.

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.

2

Решение

Вы можете сделать все это в 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)

Возможно, вы захотите не делать этого таким образом, а вместо этого сделайте отдельные операторы SELECT в вашем PHP-коде, чтобы вам было легче обрабатывать ошибки, если, например, не указан library_id, соответствующий вашему условию.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]