MySQL Compuesto clave externa Inserte su defecto
-
19-09-2019 - |
Pregunta
Tengo 2 tablas con una clave externa compuesta entre el 2. Cuando trato de insertar una fila en la tabla secundaria, me sale un fallo de la moderación, a pesar de que existen los valores de la tabla primaria.
He aquí una visión general de la tabla primaria:
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 tabla secundaria tiene la clave externa a las columnas de procesador y Fecha de publicación:
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
I inserta una fila en la tabla residual_reports con procesador = 1, y = posting_date 2010-03-10.
Cuando intento para insertar en la tabla residual_data con procesador = 1, y = posting_date 2010-03-10.
INSERT INTO `residual_data`(processor,posting_date) VALUES ('1','2010-03-10');
Me sale un:
[Err] 1452 - No se puede agregar o actualizar una fila secundaria: una restricción de clave externa falla (residual_data
, CONSTREÑIMIENTO residual_data_ibfk_1
EXTERIOR CLAVE (processor
, posting_date
) REFERENCIAS residual_reports
(processor
, posting_date
) ON UPDATE CASCADE)
verificó que los valores sin duda existen en la tabla padre, pero aún así obtener los errores de restricción de clave externa. ¿Hay algo que me falta con una clave externa compuesta?
Solución
sospecharía la ENUM de, hiciste algo con ellos después? ¿Cambió valores más o menos?
Otros consejos
Su código funciona para mí como está. ¿Es posible que los cambios a residual_reports
no han sido comprometidos todavía?
¿Qué versión de MySQL se utilizan? Parece que tienen problemas similares antes con los valores de enumeración http://bugs.mysql.com/bug.php?id=24985