Добавление внешнего ключа в существующую таблицу дает ошибку 1050 таблица уже существует
У меня есть таблица CustomizationSet таблицы со столбцами:
customization_set_guid (which is a non-nullable guid and also the primary key)
creator_account_guid
and a few others
И таблица с существующими данными Регистрация с столбцами:
registration_id (an int and the primary key)
customization_set_guid (also a guid (so a char(36)) which is nullable, and all entries are currently null)
and a few other columns
Когда я пытаюсь запустить
ALTER TABLE Registration ADD FOREIGN KEY
(
customization_set_guid
) REFERENCES CustomizationSet (
customization_set_guid
);
в MySQL Workbench, он дает ошибку 1050Table '.\dbname\registration' уже существует.
Если я попытаюсь использовать пользовательский интерфейс, чтобы добавить внешние ключи с вкладкой "Внешние ключи" диалогового окна "Изменение таблицы" и выбрать "CustomizationSet" в качестве ссылочной таблицы, он не позволяет мне выбрать customization_set_guid в списке столбцов.
Я действительно не уверен, почему это не позволит мне добавить этот внешний ключ. Я только что успешно создал внешние ключи между таблицами, которые я только что добавил. Таблица регистрации существует некоторое время...
Ответы
Ответ 1
Итак, член команды понял это. Одна таблица была настроена с типом utf8_general, а другая была установлена в тип по умолчанию. Я не думал, что это проблема, поскольку по умолчанию используется utf8_general, но, по-видимому, mysql просто ищет имена типов, а не базовый тип.
Ответ 2
Я получил ту же ошибку, и это было связано с тем, что внешний ключ уже существует. Вы хотите просто добавить ограничение:
ALTER TABLE Registration
ADD CONSTRAINT idx_Registration_CustomizationSet
FOREIGN KEY (customization_set_guid)
REFERENCES CustomizationSet(customization_set_guid);
Ответ 3
Похоже, есть отчет об ошибке в этом MySQL:
Ошибка MySQL 55296
В конце концов, я думаю, они обновили свой сервер и исправили проблему. Однако, читая его, я не уверен. У них были некоторые обходные пути, такие как включение имен ограничений/их изменение. Если вы считаете, что это то же самое, я бы попросил, чтобы ошибка была вновь открыта.
В какой-то момент они упоминают, что типы не совпадали, а workbench отвечал неправильной ошибкой (это должно было быть errno 150 или errno 121). Вы можете увидеть причины этих ошибок здесь:
Ошибки внешнего ключа MySQL и Errno 150
Ответ 4
У меня такая же ошибка, и поскольку мой случай еще не упоминался, я опубликую этот ответ и надеюсь, что он может сэкономить время!
Мои две таблицы движков, где разные.
Один из них был InnoDB, а другой MyIsam.
Чтобы изменить движок таблицы:
выберите таблицу, нажмите "Изменить таблицу", а затем нажмите эту двойную стрелку на правую часть Workbench (так что она будет направлена вверх).
Теперь измените двигатель!
Ответ 5
- Проверьте тип хранилища для таблицы CustomizationSet.
У меня была одна и та же проблема, но я мог ее решить, изменив тип двигателя на InnoDB, поскольку несколько типов не поддерживают ограничения внешнего ключа.
Ответ 6
Я не уверен, что это опечатка, но не должна быть
ALTER TABLE Registration ADD FOREIGN KEY
(
customization_set_guid
) REFERENCES CustomizationSet (
customization_set_guid
);
будет что-то вроде
ALTER TABLE Registration ADD FOREIGN KEY
customization_set_guid_fk (customization_set_guid)
REFERENCES CustomizationSet (customization_set_guid);
Ответ 7
Не уверен в уже существующей таблице, но причина, по которой он не позволяет вам выбрать нужный столбец, скорее всего, из-за того, что столбцы не являются одинаковыми. Проверьте, чтобы они были одного типа, одинаковой длины и имели все те же параметры.
Ответ 8
У меня была аналогичная проблема, и в итоге это была проблема Ограничения целостности.
Столбец Foreign Key ссылался на чужой столбец, который didnt существуют.
Попробуйте выполнить следующее, чтобы проверить, действительно ли это:
select r.customization_set_guid, c.customization_set_guid
from Registration r
right join CustomizationSet c
on
r.customization_set_guid = c.customization_set_guid
where isnull(c.customization_set_guid);
Ответ 9
При использовании MysqlWorkbench ошибка вводит в заблуждение. Моя проблема заключалась в том, что я пытался добавить ограничение внешнего ключа в таблицу, у которой уже были строки, а одна из строк пуста (не соответствовала ограничениям FK). Вместо того, чтобы жаловаться на то, что ограничение будет применено, MysqlWorkbench сообщила, что эта таблица существует.
Удаление исправляющей строки, фиксированной (или добавление и ограничение допустимого значения для поля), решило проблему.