Каким-то образом моя база данных попала в плохое состояние. У меня ранее была таблица с именем 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](https://i.stack.imgur.com/IEhJ2.png)
* ОБНОВЛЕНИЕ 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;
Проблема в том, чтоуникальное ограничение имеет то же имя, что и внешний ключ, и дважды ссылается на один и тот же столбец.