Create table schlägt fehl mit der Foreign Key-Einschränkung wird falsch Gebildet

Thema

MariaDB Mit InnoDB Fremdschlüssel Problem

Möchte beginnen mit den Worten ich bin neu auf InnoDB und verbrachte den ganzen Tag Lesen, posts, gestern habe ich versucht mehrere Dinge auf dem Weg zu mir, wo ich jetzt bin, so bin ich gehimmelt, oder gibt es einen Weg aus diesem dunklen Wald.

Ich habe eine Tabelle, die zentral in einer Reihe von Tabellen, die in meinem Datenmodell. So etwas in dieser 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, einige bereinigen DELETE /UPDATE-Klauseln auf meine FKs schnell dieses Wochenende...Berühmte Letzte Worte...

Einer verknüpften Tabelle Beispiel ist 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

Geändert von FK in der "ATHING" Tabelle ON DELETE SET NULL. Gespeichert dass mit dem Umbau alles schien ok. Ich war mit HeidiSQL um dies durchzuführen.

Lange Geschichte kurz, ich war trolling durch meine Liste der Tabellen und niedrige und siehe meine BENUTZER-Tabelle war WEG! Durch viel Lesen und Mühe ich in der Lage war, die Dinge bereinigt, aber fühlte sich wirklich sicher Dinge, die gut waren ließ ich alle FKs zeigte auf die BENUTZER-Tabelle und die Tabelle gelöscht.

Wenn ich jetzt versuchen, neu zu erstellen, die BENUTZER-Tabelle erhalte ich diese Fehlermeldung:

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

Was mir aufgefallen ist mein Erster Versuch, dies zu tun ist, während ich dachte, ich würde fallen gelassen alle FKs es waren Reste der noch keys gibt, die speziell Indizes, unterstützt, die Tasten auf einigen der Tische. In der Abfrage der INNODB_SYS_TABLES und INNODB_SYS_INDEXES Tabellen, die Indizes, die ich dachte, waren entfernt gibt es noch in diese system-Tabellen.

Gibt es eine Möglichkeit, hinaus zu gehen, diese ich fühle mich wie es gibt einige Stück von Informationen, die irgendwo, sei es im Dateisystem oder in der Datenbank selbst, das aktualisiert werden muss oder entfernt, so dass ich vorwärts bewegen können...Gedanken?

II bin verwirrt. In die "Lange Geschichte kurzer Absatz" Sie zunächst sagen, dass die USER-Tabelle gegangen war, und fiel dann der Fremdschlüssel und der BENUTZER-Tabelle? Da der BENUTZER-Tabelle, auf die verwiesen wurde, die von anderen Tabellen, ich hätte gedacht, dass fallen es würde zu Fehlern führen. Hast du ein backup von der DB?
Ja sorry, eine Reihe von Fragen aufgetreten, die während dieses Prozesses. Ich habe buchstäblich verloren, war der Tisch in der Lage zu erhalten es ist die Struktur zurück, ohne Daten und um die Konsistenz zu gewährleisten und sicherzustellen, dass alles ok war, habe ich beschlossen, alle löschen, die Fremdschlüssel aus alle referenzierenden Tabellen und drop der BENUTZER-Tabelle. Wenn ich versuchen, und erstellen Sie die BENUTZER-Tabelle das Ergebnis ist die Fehlermeldung oben gepostet. Die Sicherung konnte aufgrund der BENUTZER-Tabelle verschwinden verursacht eine Sicht, die name wie active_blah das war das erste Objekt in der sqldump und ist aufgrund von Fehlern fehlgeschlagen...
Gute Trauer. Murphy bezahlt hat Sie Sie besuchen. Können Sie eine neue Datenbank erstellen und anwenden, die Sicherung ist es?
Also das positive daran ist dies ist eine primäre Entwicklungs-Umgebung, ohne eine Menge Daten...leider sind die dev-RS sind scharrt an der bit für die Umwelt...also, was ich versuche zu tun, ist, den kürzesten Weg zu finden, um dieses Problem zu beheben. Ich lese etwas, der angibt, dass ich, wenn ich umgebaut jedem der Tische, der hatte FK Verweise auf diese Tabelle, dass sollte das Problem beheben. Ist das Tatsache oder Fiktion und oder sollte ich einfach nur effektiv neu generieren der Umgebung von meine-Modellierungs-tool und verschieben von Daten über als kann ich?
Wenn Sie das Datenmodell gespeichert oder ist es relativ einfach nachzubauen, dann sicher, ich würde den sauren Apfel beißen und von vorne zu beginnen, anstatt von wahrscheinlich viel Zeit mit überflüssigen tricks. Vielleicht finden Sie sogar Verbesserungen am Datenmodell. Oft, wenn ich die rewrite-code es wird in der Regel besser. Erinnern Sie die devr ist, dass "es ist niemals Zeit, es richtig zu machen, aber immer Zeit, es zu tun über."

InformationsquelleAutor John | 2014-06-08

Schreibe einen Kommentar