Frage

Ich habe 2 Tabellen mit einem zusammengesetzten Fremdschlüssel zwischen dem 2. Wenn ich versuche, eine Zeile in die untergeordneten Tabelle einzufügen, erhalte ich eine Zurückhaltung Versagen, obwohl die Werte existieren in der übergeordneten Tabelle.

Hier ist ein Überblick über die übergeordnete Tabelle:

CREATE TABLE `residual_reports` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `processor` enum('1','2','3') NOT NULL,
  `posting_date` date NOT NULL DEFAULT '0000-00-00',
  `approved_on` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `posting_date_2` (`processor`,`posting_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Das Kind Tabelle hat den Fremdschlüssel auf den Prozessor und Buchungsdatum Spalten:

CREATE TABLE `residual_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mid` varchar(29) DEFAULT NULL,
  `processor` enum('1','2','3') NOT NULL,
  `posting_date` date NOT NULL,
  ......
  PRIMARY KEY (`id`),
  KEY `residual_data_ibfk_1` (`processor`,`posting_date`),
  CONSTRAINT `residual_data_ibfk_1` FOREIGN KEY (`processor`, `posting_date`) REFERENCES `residual_reports` (`processor`, `posting_date`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

eingefügt I eine Zeile in die Tabelle mit residual_reports Prozessor = 1 und = POSTING_DATE 2010-03-10.

Wenn ich versuche, in die residual_data Tabelle einzufügen mit Prozessor = 1 und POSTING_DATE = 2010-03-10.

INSERT INTO `residual_data`(processor,posting_date) VALUES ('1','2010-03-10');

Ich bekomme ein:

[Err] 1452 - Kann nicht hinzugefügt werden oder ein Kind Zeile aktualisieren: ein Fremdschlüssel fehlschlägt (residual_data, CONSTRAINT residual_data_ibfk_1 FOREIGN KEY (processor, posting_date) LITERATUR residual_reports (processor, posting_date) ON UPDATE CASCADE)

überprüft, dass die Werte auf jeden Fall in der übergeordneten Tabelle vorhanden ist, aber immer noch Fremdschlüssel Zurückhaltung Fehler bekommen. Gibt es etwas, das ich mit einem zusammengesetzten Fremdschlüssel bin fehlt?

War es hilfreich?

Lösung

würde ich die ENUM des vermutet, hast du etwas mit ihnen danach? Haben Sie Werte ändern oder so?

Andere Tipps

Der Code funktioniert für mich, wie sie ist. Ist es möglich, dass Änderungen an residual_reports noch nicht begangen worden ist?

Was Mysql Version verwenden Sie? Es scheint, dass sie, bevor sie mit ENUM-Werte ähnliche Probleme haben http://bugs.mysql.com/bug.php?id=24985

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top