Удалить внешний ключ MySQL не существует - PullRequest
0 голосов
/ 16 октября 2018

У меня есть таблица в MySQL, подобная этой (это возвращается из использования show create table user_org_contacts):

CREATE TABLE `user_org_contacts` (
 `user_org_contacts_id` int(11) NOT NULL AUTO_INCREMENT,
 `from_user_id` int(11) DEFAULT NULL,
 `to_org_user_id` int(11) DEFAULT NULL,
 `suggested_vacancy_id` int(11) DEFAULT NULL,
 `contact_date` datetime NOT NULL,
 `message` text,
 PRIMARY KEY (`user_org_contacts_id`),
 KEY `FK_Reference_53` (`from_user_id`),
 KEY `FK_Reference_54` (`to_org_user_id`),
 KEY `FK_Reference_55` (`suggested_vacancy_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1

Я заметил, что мой FK_Reference_54 неверен и указывает на неправильную таблицу.Поэтому я хотел бы изменить это на правильный FK.

Это то, что я пытался:

ALTER TABLE `user_org_contacts` 
DROP FOREIGN KEY `FK_Reference_54`;  

ALTER TABLE `user_org_contacts`  
ADD CONSTRAINT `FK_Reference_54` 
    FOREIGN KEY (`to_org_user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE;  

Это приводит к следующей ошибке:

1091- не могу удалить 'FK_Reference_54';проверьте, что столбец / ключ существует

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Проблема в том, что вы путаете индексы с первичными ключами.

Ключевое слово KEY фактически показывает вам индексы, в то время как первичные ключи используют ключевые слова CONSTRAINT ... FOREIGN KEY ...

Пример:

CONSTRAINT `FK_name` FOREIGN KEY (`current_field_name`)
REFERENCES `external_table_name` (`external_field_name`) ON DELETE CASCADE ON UPDATE CASCADE

Так что в вашем случае, если вы хотите удалить свой INDEX, вам просто нужно вызвать этот запрос

ALTER TABLE `user_org_contacts` 
DROP INDEX `FK_Reference_54`; 

В следующий раз, когда я предлагаю вам использовать некоторый интерфейс для mysql, напримерMySQL верстак, с этим вы бы сразу заметили проблему.

0 голосов
/ 16 октября 2018

Сначала попробуйте удалить этот столбец ALTER TABLE tablename DROP COLUMN columname;Затем: ALTER TABLE tablename ADD columnname datatype.

Или вы можете попробовать эту опцию Modify, как.ALTER TABLE tablename MODIFY COLUMN имя столбца тип данных;

Надеюсь, это поможет вам.

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