mysql - что означает эта ошибка? - PullRequest
2 голосов
/ 16 сентября 2010

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

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?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 16 сентября 2010

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

0 голосов
/ 16 сентября 2010

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

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

FOREIGN KEY (product_id) REFERENCES product  (id)

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

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

0 голосов
/ 16 сентября 2010

Вы вставляете пустую строку как productid (Четвертый элемент в списке)

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

Существует ограничение ссылочной целостности, гарантирующее, что вы должны вставить только productid s, соответствующий одномув ссылочной таблице product.

...