Тема
Проблема с внешним ключом MariaDB InnoDB
Хочу начать с того, что я новичок в InnoDB и вчера весь день читал сообщения. Я пробовал несколько вещей на этом пути, чтобы добраться туда, где я сейчас, так что я облился водой или есть выход из этого темного леса.
У меня есть таблица, которая является центральной для ряда таблиц в моей модели данных. Итак, что-то в этом роде:
create table users (id int not null auto_increment
, username varchar(255) NOT NULL
, password varchar(255) NOT NULL
, active int NOT NULL
, PRIMARY KEY (id))
ENGINE=InnoDB COLLATE=utf8_unicode_ci;
В эти выходные решил быстро убрать некоторые пункты DELETE / UPDATE в моих FK... Знаменитые последние слова...
Пример связанной таблицы здесь
create table athing (id int not null auto_increment
, name varchar(255) not null
, status varchar(255) not null
, created_by_user_id int
, PRIMARY KEY (id)
, CONSTRAINT athing_fk1 FOREIGN KEY (created_by_user_id) REFERENCES users (id)
) ENGINE=InnoDB COLLATE=utf8_unicode_ci;
Проблема
Изменен FK в таблице «ATHING», чтобы включить ON DELETE SET NULL. Сохранил эту модификацию вроде все ок. Для этого я использовал HeidiSQL.
Короче говоря, я просматривал свой список столов и опустился, и вот, моя таблица USERS ИСЧЕЗЛА! Благодаря большому чтению и усилиям я смог навести порядок, но, чтобы убедиться, что все действительно хорошо, я удалил все FK, указывающие на таблицу USERS, и удалил таблицу.
Теперь, когда я пытаюсь воссоздать таблицу USERS, я получаю эту ошибку:
ERROR 1005 (HY000): Can't create table `sprintdb`.`system_users` (errno: 150 "Foreign key constraint is incorrectly formed")
Что я заметил после моей первой попытки сделать это, так это то, что, хотя я думал, что сбросил все FK, там все еще оставались остатки ключей, в частности индексы, которые поддерживали эти ключи в некоторых таблицах. При запросе таблиц INNODB_SYS_TABLES и INNODB_SYS_INDEXES те индексы, которые я считал удаленными, все еще существуют в этих системных таблицах.
Есть ли способ выйти за рамки этого? Я чувствую, что где-то существует какая-то часть информации, будь то в файловой системе или в самой базе данных, которую необходимо обновить или удалить, чтобы я мог двигаться вперед... мысли?