Невозможно создать таблицу mysql (mariadb). Таблица повреждена - PullRequest
2 голосов
/ 11 октября 2019

Каким-то образом моя база данных попала в плохое состояние. У меня ранее была таблица с именем live_stream. Когда я попытался удалить ограничение внешнего ключа, я получил ошибку, что mariadb не может переименовать #sql-26_e7a в live_stream. Теперь, когда я пытаюсь выполнить следующий оператор, я получаю эту ошибку.

Невозможно создать таблицу live_stream (errno: 150 "Неправильно сформировано ограничение внешнего ключа")

CREATE TABLE live_stream ( id bigint(20) NOT NULL PRIMARY KEY);

Как видите, у меня нет ограничений внешнего ключа в определении. Если я попробую точно такое же определение с другим именем таблицы, это сработает. Если я пытаюсь отбросить таблицу, mariadb жалуется, что live_stream не существует. Это как таблица или внешний ключ застряли в транзакции или что-то в этом роде.

Я использую галару с Марией дБ 10.3.

ОБНОВЛЕНИЕ

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

* ОБНОВЛЕНИЕ 2 * Вот вывод SHOW ENGINE INNODB STATUS;enter image description here

* ОБНОВЛЕНИЕ 3 *

Вот шаги для воспроизведения.

создать таблицу tb1 (id bigint null, ограничение tb1_pk, первичный ключ (id));

создание таблицы tb2 (идентификатор bigint null, tb1_id bigint null, ограничение tb2_pk ограничения (id), ограничение tb2_tb1_id_fk (внешний ключ (tb1_id) ссылается на tb1 (id));

ALTER TABLE tb2 ADD CONSTRAINT tb2_tb1_id_fk UNIQUE (tb1_id, tb1_id);

drop index tb2_tb1_id_fk на tb2;

Проблема в том, чтоуникальное ограничение имеет то же имя, что и внешний ключ, и дважды ссылается на один и тот же столбец.

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