Das Erstellen einer Tabelle schlägt fehl, wenn die Fremdschlüsseleinschränkung falsch gebildet wurde

Thema

MariaDB InnoDB Fremdschlüssel-Ausgabe

Zunächst möchte ich sagen, dass ich neu bei InnoDB bin und gestern den ganzen Tag Beiträge gelesen habe. Auf dem Weg habe ich mehrere Dinge versucht, um mich dahin zu bringen, wo ich jetzt bin. Bin ich also abgespritzt oder gibt es einen Ausweg aus diesem dunklen Wald?

Ich habe eine Tabelle, die für eine Reihe von Tabellen in meinem Datenmodell von zentraler Bedeutung ist. Also etwas in diese Richtung:

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;

Beschlossen, dieses Wochenende einige DELETE / UPDATE-Klauseln auf meinen FKs schnell zu bereinigen ... Famous Last Words ...

Ein entsprechendes Tabellenbeispiel finden Sie hier

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;
Problem

Die FK in der Tabelle "ATHING" wurde so geändert, dass sie ON DELETE SET NULL enthält. Gespeichert diese Änderung alles schien in Ordnung. Ich habe HeidiSQL verwendet, um dies durchzuführen.

Lange Rede, kurzer Sinn, ich habe meine Liste der Tische durchgesehen und siehe, mein USERS-Tisch war GEGANGEN! Durch viel Lesen und Mühen konnte ich die Dinge bereinigen, aber ich hatte das Gefühl, dass die Dinge wirklich gut waren. Ich ließ alle FKs fallen, die auf den USERS-Tisch zeigten, und ließ den Tisch fallen.

Wenn ich jetzt versuche, die USERS-Tabelle neu zu erstellen, erhalte ich die folgende Fehlermeldung:

ERROR 1005 (HY000): Can't create table `sprintdb`.`system_users` (errno: 150 "Foreign key constraint is incorrectly formed")

Was mir nach meinem ersten Versuch aufgefallen ist, war, dass ich dachte, ich hätte alle FKs fallen lassen. Es gibt noch Reste von Schlüsseln, die diese Schlüssel in einigen Tabellen unterstützen. Bei der Abfrage der Tabellen INNODB_SYS_TABLES und INNODB_SYS_INDEXES sind die Indizes, von denen ich dachte, dass sie entfernt wurden, noch in diesen Systemtabellen vorhanden.

Gibt es eine Möglichkeit, darüber hinauszugehen? Ich habe das Gefühl, dass irgendwo Informationen vorhanden sind, sei es im Dateisystem oder in der Datenbank selbst, die aktualisiert oder entfernt werden müssen, damit ich vorwärts gehen kann ... Gedanken?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage