¿Cómo usar una clave primaria con incremento automático también como clave externa?
Esto es lo que estoy tratando de hacer:
Tengo 2 mesas ...
CREATE TABLE `parent` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `child` (
`parent_id` int(11) DEFAULT NULL,
`related_ids` int(11) DEFAULT NULL,
KEY `parent_id` (`parent_id`),
KEY `related_ids` (`related_ids`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Y luego una restricción:
ALTER TABLE `parent` ADD FOREIGN KEY (`id`) REFERENCES `child` (`parent_id`);
Como puede ver, la tabla padre tiene una "identificación" de clave primaria con incremento automático, que también se usa como clave foránea para la tabla secundaria.
Ahora quiero insertar un registro en la tabla principal, así:
INSERT INTO parent SET DATA="abc";
Y falla con error:
No se puede agregar o actualizar una fila secundaria: falla una restricción de clave externa (anacorbero
.parent
, RESTRICCIÓNparent_ibfk_1
CLAVE EXTERNA (id
) REFERENCIASchild
(parent_id
))
Entiendo que falla porque no encuentra un registro referido en la tabla secundaria. Si empiezo creando un registro en la tabla secundaria, establezca su parent_id en 1, luego restablezca el contador de incremento automático de la tabla primaria (para que la siguiente inserción tenga id = 1), ¡funciona! Pero eso no es una solución.
No veo la utilidad del bloqueo de inserción si no hay una fila relacionada en la tabla secundaria ...
Solo estoy tratando de hacer una relación uno a muchos ...
(Sé que puedo usar JOIN, pero estoy tratando de usar relaciones de tabla, para la integridad de los datos y también como metadatos para PHP)