2016-03-21 4 views
1

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

INSERT INTO `Albums` (`Albumid`, `Name`, `Numberoftracks`, `Artistid`,  ] 
`Genre`) VALUES (1, "Innuendo", 12, "Queen", "Rock"); 

Но каждый раз, когда я пытаюсь я получаю эту ошибку ,

1452 - Cannot add or update a child row: a foreign key constraint fails 
(`b4014107_db1/Albums`, CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`) 
REFERENCES `Artist` (`Artistid`)) 

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

Вот код таблицы.

CREATE TABLE `Albums` ( `Albumid` int(6) NOT NULL, `Name` varchar(50) NOT 
NULL, `Numberoftracks` int(11) NOT NULL, `Artistid` int(6) NOT NULL, 
`Genre` varchar(50) NOT NULL, PRIMARY KEY (`Albumid`), KEY `Artistid` 
(`Artistid`), CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`) 
REFERENCES `Artist` (`Artistid`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 

Как исправить это? Мне нужно ввести данные в таблицу.

+0

Добавили ли вы художника «Queen» на стол художника? Потому что, если нет, вы должны добавить художника сначала, иначе ваш FK всегда будет нарушен. –

+0

Кроме того, ArtistId - это номер, и вы пытаетесь добавить туда VARCHAR. Вы должны добавить художника «Queen» на исполнителя стола и получить ArtistId для использования в этой вставке. –

ответ

1

artistid является внешним ключом в таблице Albums. Ошибка родительских дочерних отношений возникает, когда вы пытаетесь вставить внешний ключ в дочернюю таблицу, которая отсутствует в родительской таблице. artistid нет в вашей таблице Artist.

Кроме того, для добавления типа данных artistid также отличается.

Взятые из mysql docs

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

Он отклонит любую операцию INSERT или UPDATE, которая пытается создать значение внешнего ключа в дочерней таблице, если в родительской таблице нет соответствующего значения ключа ключа .

Чтобы удалить ошибку, вставьте Queens художника в вашем Artist столе, а затем вы можете вставить его в Albums таблицу. Также исправьте тип данных столбца artistid.

0

Использование внешних ключей не означает никакого неявного автоинкремента. Внешний ключ в таблице означает, что запись должна уже существовать в другой. см. http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html (изменить версию в адресе по вашим требованиям)

В противном случае создайте триггер, если вы хотите, чтобы художник был динамически создан.

Надеюсь, что это прояснится.

 Смежные вопросы

  • Нет связанных вопросов^_^