MySQL Composite chiave esterna Inserire mancanza
-
19-09-2019 - |
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?
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