2013-06-20 4 views
0

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

Error Code : 1452 
Cannot add or update a child row: a foreign key constraint fails (`tms`.`groups`, CONSTRAINT `FK_groups` FOREIGN KEY (`GroupName`) REFERENCES `users` (`groupname`) ON DELETE CASCADE ON UPDATE CASCADE) 

Спасибо, -Jeevan

+1

показать нам структуру таблицы и запрос – Stephan

+0

Можете ли вы поделиться более подробной информацией, например, с запросом и т. Д.? – heretolearn

ответ

1

Я предполагаю, что группа содержит много пользователей, и через пользователь принадлежат к одной группе.

Затем вы указали внешний ключ в неправильном направлении. Фактически users.groupname должен указывать tms.groups. Отбросьте текущий внешний ключ и перестройте его наоборот (в таблице users).

0

Это происходит, если вы попытаетесь ссылаться на не существующую запись в базе данных. Короче говоря, вы вставили в groups и попытались ссылаться на запись user, которая еще не существует.

+0

, что я хочу спросить, является ли каскад внешнего ключа для таблицы пользователей, если я изменяю имя в таблице групп, т. Е. Родительскую таблицу в отношениях? – user2416918

+0

О, вы пытались обновить значение внешнего ключа. Нет, это невозможно. Внешний ключ может ссылаться только на существующую запись в ссылочной таблице. Но изменение значения fk не меняет значения столбца таблицы ссылок! 'ON UPDATE CASCADE' означает только то, что значение ограничения внешнего ключа будет обновлено, в случае обновления значения столбца таблицы ссылок. Аналогично, это 'ON DELETE CASCADE' для удаления строки данных, на которую ссылаются. –

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