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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top