Решение SQL ошибки #1005 при создании таблицы InnoDB
Быстрый ответ
Для решения проблемы с ошибкой MySQL 121, обязательно используйте уникальные имена для ограничений внешних ключей на уровне всей базы данных. Пример исправления:
ALTER TABLE `insert_table_name` ADD CONSTRAINT `insert_unique_fk_name` FOREIGN KEY (`insert_column_name`) REFERENCES `another_table_name` (`another_column_name`);
Замените insert_table_name
, insert_unique_fk_name
, insert_column_name
актуальными значениями и проверьте, чтобы insert_unique_fk_name
было уникальным в контексте всей базы данных.
Визуализация
Представьте, что вы – художник, создающий шедевры живописи. Каждый из них требует уникальной подписи:
Создаём:
- Картина А 🎨 (Подпись: ✍️А)
- Картина В 🎨 (Подпись: ✍️В)
В мире SQL ситуация с ошибкой errno: 121 обстоит следующим образом:
- Попытка подписать: ✍️А & ✍️А
- Ошибка: 🚫 Необходима уникальная подпись!
Метод решения — использование уникальных ограничений или ключей:
- Правильные подписи: ✍️А & ✍️В
- Итог: ✅ Два уникальных шедевра!
Важно помнить:
🎨 Каждой "таблице" или "шедевру" требуется своя уникальная ✍️ "подпись" или "ограничение".
🚫 Повторяющиеся подписи приводят к хаосу в галерее (вашей базе данных)!
Пошаговые инструкции по устранению ошибки errno: 121
Следуйте советам ниже, чтобы исправить ошибку MySQL 121.
План действий: Принципы именования ограничений
- Стандарт и целостность: Используйте входящие в принятый стандарт префиксы, такие как
fk_
для внешних ключей,pk_
для первичных иuq_
для уникальных индексов. - Контекст таблиц: Вставка названия таблицы в идентификатор ограничения повышает его узнаваемость.
- Уникальность и последовательность: Добавьте номер-суффикс для ограничений одного типа на одной и той же таблице.
# Пример уникального именования ограничения
ALTER TABLE `orders` ADD CONSTRAINT `fk_orders_customers_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`);
Подробнее об этом расскажет наш спикер на видео
Инструменты: Исследование и отладка
- perror – решение проблем с ошибками: Команда
perror
помогает интерпретировать коды ошибок MySQL. Пример использования:perror 121
.
# Пример использования perror для диагностики
perror 121
- Поиск дубликатов: Используйте обзор схемы или таблицу
information_schema
, чтобы выявить дубликаты ограничений.
Предотвращение ошибок: Распространённые случаи
- Дублирование ключей: Ограничения могут дублироваться при клонировании таблиц или миграциях.
# Проверка наличия дубликатов ограничений
SELECT CONSTRAINT_NAME, TABLE_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE CONSTRAINT_SCHEMA = 'your_database_name'
ORDER BY CONSTRAINT_NAME;
- Коллизия наименований при импорте: Во время импорта может возникнуть совпадение имен ограничений, поэтому следите за их уникальностью и при необходимости меняйте названия.
Прогнозирование и тестирование
- Песочница: Прежде чем реализовывать изменения в рабочем окружении, выполните тесты в отдельной зоне, чтобы исключить возможность ошибки
errno: 121
на рабочей базе данных.
Полезные материалы
- MySQL :: Справочник по ошибкам MySQL 8.0 :: 2 Справочник по сообщениям серверных ошибок — подробное обсуждение кодов ошибок MySQL, включая
errno: 121
. - wpf – C# binding received data – Stack Overflow — практический пример, демонстрирующий возникновение ошибки MySQL
errno: 121
. - Справочник по кодам ошибок MariaDB – База знаний MariaDB — обзор кодов ошибок MariaDB, к которым относится и
errno: 121
. - MySQL :: Руководство по MySQL 8.0 :: 15.1.15 Создание индекса — подробное руководство по созданию индексов, связанных с ошибка
errno: 121
. - MySQL :: Руководство по MySQL 8.0 :: 11.2 Именование объектов — правила именования объектов баз данных в MySQL, которые помогают избежать ошибки
errno: 121
. - MySQL :: Руководство по MySQL 8.0 :: 15.1.20.5 Ограничения внешнего ключа — основные принципы работы с ограничениями внешних ключей и частые причины возникновения ошибки
errno: 121
.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Что необходимо сделать для устранения ошибки MySQL 121?
1 / 5