2010-09-16 1 views
2

Я не требую, чтобы эта ошибка была решена. Мне просто нужно понять, что это значит, поэтому я могу подойти сам.mysql - что означает эта ошибка?

Cannot add or update a child row: a foreign key constraint fails 
    (`db`.`transaction`, CONSTRAINT `transaction_ibfk_2` 
    FOREIGN KEY (`product_id`) REFERENCES `product` (`id`)) 

INSERT INTO `transaction` (`client_id`, `cost`, `website_id`, `product_id`, 
    `template_number`, `value`, `order_id`) 
    VALUES ('17', '', '2480', '', '', '12', '1'); 

Что такое внешний ключ? Как это установить?

Что означает CONSTRAINT transaction_ibfk_2?

Означает ли это, что мне нужен стол под названием transaction_ibfk_2?

Спасибо.

+1

Я предлагаю вам внешний ключ от Google и сначала прочитайте его. – Brissles

ответ

0

Вы вставив пустую строку в качестве productid (Четвертого пункта в списке)

INSERT INTO transaction 
(client_id, cost, website_id, product_id, template_number, value, order_id) 
VALUES ('17', '', '2480', '', '', '12', '1') 

Там есть ограничение ссылочной целостности создана для того, чтобы вы должны вставить только productid S, соответствующий одной в ссылочном product таблицы ,

0

Это означает, что вы пытаетесь добавить значение в столбец внешнего ключа, который недоступен в столбце с ссылкой или пытается добавить пустое поле в столбце внешнего ключа. т. Е. Вы пытаетесь добавить product_id как пустую, что запрещено. Все значения в столбце внешнего ключа должны быть действительными значениями, содержащимися в главном ссылочном идентификаторе столбца.

0

Существует не обязательно связь между именами ограничений и таблицами, хотя большинство людей называют их соответствующим образом, чтобы облегчить их жизнь.

Все это означает, что у вас есть ограничение transaction_ibfk_2. Реальная проблема заключается в остальной части сообщения:

FOREIGN KEY (product_id) REFERENCES product (id) 

Вам нужно вставить строку в ваш product стол первым. id, который вы вставляете туда, должен быть product_id, который вы пытаетесь вставить в transaction (это почему-то ''). Я уверен, что это должно быть реальное значение (или, возможно, NULL)).

Вы можете создавать внешние ключи с предложением операторов create table или alter table DDL.