Я, ребята,
У меня есть две таблицы:
Таблица "_config":
Таблица "_usuarios":
И когда я пытаюсь добавить внешний ключ:
ALTER TABLE '_config' ADD CONSTRAINT '_config__entitycreateuser_fk'
FOREIGN KEY ('_EntityCreateUser')
REFERENCES '_usuarios'('UsuarioId')
ON DELETE CASCADE ON UPDATE SET NULL
Я получаю эту ошибку:
Ошибка SQL (1005): невозможно создать таблицу "имя_базы". '# Sql-14a4_3' (errno: 121 "Дублировать ключ при записи или обновлении)
Я пытаюсь установить FOREIGN_KEY_CHECKS на 0, но возвращает:
Ошибка SQL (1825) Не удалось добавить ограничение внешнего ключа в таблицу "_config". Неправильные параметры в ограничении FOREIGN KEY 'databasename/_config__entitycreateuser_fk' º Все таблицы пусты
Убедитесь, что имя для вашего внешнего ключа уникально для базы данных
SELECT
constraint_name,
table_name
FROM
information_schema.table_constraints
WHERE
constraint_type = 'FOREIGN KEY'
AND table_schema = DATABASE()
AND constraint_name = '_config__entitycreateuser_fk'
Это одна из самых распространенных исправлений.
Открыть поисковую версию.
SELECT
constraint_name,
table_name
FROM
information_schema.table_constraints
WHERE
constraint_type = 'FOREIGN KEY'
AND table_schema = DATABASE()
ORDER BY constraint_name ASC
В ответ на ваш комментарий я снова редактирую свой ответ.
Дважды проверьте, что таблицы, о которых идет речь, _config
и _usuarios
не разбиты на разделы. InnoDB имеет ограничения на ограничения FK
для секционированных таблиц. Вы должны иметь возможность ознакомиться с особенностями руководства.
В более полезной ноте попробуйте запустить этот SHOW ENGINE innodb STATUS
после попытки снова добавить ограничение FK
. Он покажет вам детали ошибки.
Теперь я думаю, что ваша проблема ...ON UPDATE SET NULL
. Поскольку вы пытаетесь установить SET NULL
в столбец _usuarios.UsuarioId
который, как представляется, является IDENTITY
вашей таблицы. Будучи IDENTITY
автоматически устанавливается столбец NOT NULLABLE