Не могу удалить строку в таблице (MySQL) - PullRequest
0 голосов
/ 17 декабря 2010

Уважаемые все, у меня проблема в MySQL: Мне не удалось выполнить DELETE FROM users where user_id ='1'; в CLI MySQL. Поэтому я попробовал в phpMyAdmin: Используйте графический интерфейс для удаления строки, я получил это:

SQL-запрос:

DELETE FROM `health_portal`.`users` WHERE `users`.`user_id` =1

MySQL сказал: Документация

Cannot delete or update a parent row: a foreign key constraint fails (`health_portal`.`users`, CONSTRAINT `users_ibfk_2` FOREIGN KEY (`doctor_id`) REFERENCES `users` (`user_id`)) 

Я посмотрел эту ошибку на веб-сайте Mysql и получил: Ошибка: 1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2)

Сообщение. Невозможно удалить или обновить родительскую строку: сбой ограничения внешнего ключа (% s)

Я не знаю, что здесь не так, надеюсь, кто-нибудь может подсказать мне.

Многие, спасибо!

Ответы [ 6 ]

6 голосов
/ 17 декабря 2010

У вас есть врач, который ссылается на этого пользователя через внешний ключ с on delete no action или on delete restrict.Либо измените внешний ключ на on delete set null (который устанавливает нулевой user_id доктора, на которого указывает ссылка), либо на on delete cascade (который удаляет доктора вместе с пользователем), либо вручную назначьте доктора другому пользователю, а затем повторите запрос..

1 голос
/ 17 декабря 2010

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

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

1 голос
/ 17 декабря 2010

У вас есть таблица (доктора, я полагаю), которая ссылается на эту строку с ограничением внешнего ключа. Вы должны сначала удалить доктора, чтобы удалить пользователя. Или добавьте каскад при удалении к ограничению внешнего ключа.

1 голос
/ 17 декабря 2010

Существует еще одна таблица, в которой используется этот пользователь (с user_id, равным 1), и эту строку необходимо удалить, прежде чем вы сможете удалить пользователя из таблицы users.

0 голосов
/ 06 февраля 2014

Причина в том, что вы уже создали внешний ключ ('users_ibfk_2'), который ссылается на поле ('user_id') в таблице, для которой вы хотите удалить строку из него. но так как вы создали внешний ключ, удаление внешнего ключа не является хорошим решением, так что лучшее решение (если вы используете phpmyadmin):

  1. выберите дочернюю таблицу
  2. выберите вкладку «Структура»
  3. перейти к «Представлению отношений»
  4. изменить второй раскрывающийся список (ON DELETE) [в строке, соответствующей 'doctor_id'], на 'CASCADE'

Теперь, удалив строку в вашей родительской таблице, соответствующая строка в дочерней таблице будет удалена.

если вы не используете phpmyadmin:

  1. сбросить внешний ключ
  2. добавить новый внешний ключ с каскадным действием ON DELETE вместо
0 голосов
/ 17 декабря 2010

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

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