2015-03-16 3 views
2

У меня довольно сложная база данных, настроенная с большим количеством внешних ключей и хочу знать, есть ли простой способ вставить запись в одну из этих таблиц.MySQL Вставка Statement external key auto add 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) 

Вы можете не сделать это таким образом, хотя, и вместо того, чтобы делать отдельный ЗЕЬЕСТ в вашем PHP коде, так что вы можете иметь дело ошибки более легко, если, например, нет library_id что соответствует вашему состоянию.

+0

Хорошо, это похоже, что он будет работать хорошо. Я думаю, что это должно было быть сделано в PHP, потому что из-за проблем с получением более или менее одного результата ... Я как бы надеялся остаться вне PHP как можно больше, но это будет отлично работать. Спасибо! – Totalllyrandomguy