Domanda

Ho 2 tabelle con una chiave esterna composta tra il 2. Quando si tenta di inserire una riga nella tabella figlio, ottengo un fallimento moderazione, anche se esistono dei valori nella tabella padre.

Ecco una panoramica della tabella padre:

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

La tabella bambino ha la chiave esterna alle colonne del processore e data della pubblicazione:

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

ho inserito una riga nella tabella residual_reports con processore = 1, e posting_date = 2010-03-10.

Quando si tenta di inserire nella tabella residual_data con processore = 1, e posting_date = 2010-03-10.

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

Ho ricevuto un:

[Err] 1452 - Impossibile aggiungere o aggiornare la riga: un vincolo di chiave esterna non riesce (residual_data, VINCOLO residual_data_ibfk_1 FOREIGN KEY (processor, posting_date) RIFERIMENTI residual_reports (processor, posting_date) ON UPDATE CASCADE)

verificato che i valori sicuramente esistono nella tabella padre, ma ancora ottenere gli errori di ritenuta chiave esterna. C'è qualcosa che mi manca con una chiave esterna composta?

È stato utile?

Soluzione

Ho il sospetto della ENUM del, hai fatto qualcosa con loro dopo? Hai cambiato i valori o giù di lì?

Altri suggerimenti

Il tuo codice funziona per me così come sono. E 'possibile che le modifiche al residual_reports non ancora impegnati?

Che versione di MySQL si usa? Sembra che essi hanno problemi simili, prima con i valori enum http://bugs.mysql.com/bug.php?id=24985

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top