2016-07-15 21 views
2

Ich habe gut gesucht und keine Antwort Erläuterung des Problems gut finden. Hier ist ein vereinfachtes Beispiel für mein Problem. Sagen wir, ich test mit zwei Feldern first und second einen Tisch haben. Ich mache first den Primärschlüssel und will secondfirst und Kaskade auf Update verweisen. Dadurch kann ich eine Liste von Zeilen erstellen, wobei ich weiß, welche Zeile nach einer bestimmten Zeile steht, außer dem "Kopf".Fremdschlüssel Referenzierung derselben Tabelle

Erstellen der Tabelle funktioniert gut, aber wenn ich versuche, eine Zeile hinzuzufügen, es beschwert sich, dass die Fremdschlüssel mit Cascading Update fehlgeschlagen. Dies macht Sinn, als ich second als null verließ. Deshalb dachte ich, ich zwei Zeilen einfügen könnte und dann den Fremdschlüssel hinzufügen:

  1. first: a second: b
  2. first: b second: a

Dies war erfolgreich. Ich versuchte dann Zeile 1 zu aktualisieren, um einen first Wert von c zu haben. Dies funktionierte jedoch nicht, da der Fremdschlüssel fehlgeschlagen war. Warum? Sollte es nicht einfach folgendes werden?

  1. first: c second: b
  2. first: b second: c

Meine einzige Vermutung ist, die Existenz von Kreis Updates mit dem Update 1 Kaskadierung zu Zeile 2 Zeile, zurück Kaskadierung auf Reihe 1, aber dies geschieht nicht! Es gibt nichts, das auf second verweist, also sollte das Update nur auf Zeile 2 kaskadieren und stoppen. Bitte hilf mir, das macht mich verrückt.

Edit: Wie gewünscht, hier ist mein show create table test.

CREATE TABLE `test` (
`first` varchar(32) NOT NULL, 
`second` varchar(32) NOT NULL, 
PRIMARY KEY (`first`), 
KEY `fk` (`second`), 
CONSTRAINT `fk` FOREIGN KEY (`second`) REFERENCES `test` (`first`) ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

Antwort

0

denke ich Problem in der Struktur der Spalten ist:

  • Primärschlüssel nicht null
  • und Werden Sie Spalte Nullwert sein kann, hat erlaubt, (nicht zulässig, wenn Spalte verwiesen wird, ist nicht null)

So stellen Sie sicher, dass Sie beide Spalten mit demselben Datentyp haben, denselben Zeichensatz, nicht null beide.

Update: Problem ist, dass Fremdschlüssel und Referenzierungsschlüssel in der gleichen Tabelle ist, habe ich mit verschiedenen Tabelle getestet und es hat funktioniert.

+0

Der Primärschlüssel ist nicht null, da es c für Zeile ein und b für Zeile zwei sein wird. Die referenzierende Spalte hat auch keinen Nullwert. Es wird b für die erste Zeile und c für die zweite Zeile sein. –

+1

es wird nicht Nullwert aber haben? Bitte fügen Sie 'show create table test' hinzu, um die Struktur zu sehen. danke –

+0

Definitiv, meine Frage mit den Ergebnissen bearbeitet. –

Verwandte Themen