Comment utiliser un auto incrémenté de clé primaire clé étrangère?

C'est ce que j'essaie de faire:

J'ai 2 tables...

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;

Puis une contrainte:

ALTER TABLE `parent` ADD FOREIGN KEY (`id`) REFERENCES `child` (`parent_id`);

Comme vous pouvez le voir la table parent a une auto-incrémenté clé primaire "id" est également utilisé en tant que clé étrangère pour la table enfant.

Maintenant, je veux insérer un enregistrement dans la table parent, comme ceci:

INSERT INTO parent SET DATA="abc";

Et il échoue avec l'erreur:

Ne peut pas ajouter ou mettre à jour une ligne enfant: un
contrainte de clé étrangère échoue
(myschema.parent, CONTRAINTE
parent_ibfk_1 CLÉ ÉTRANGÈRE (id)
RÉFÉRENCES child (parent_id))

Je comprends qu'il échoue parce qu'il ne trouve pas une visée d'enregistrement dans la table enfant. Si je commence par créer un enregistrement dans la table enfant, ensemble c'est parent_id à 1, puis de réinitialiser l'auto-incrémentation du compteur de la table parent (de sorte que la prochaine plaquette id = 1), il fonctionne! Mais ce n'est pas une solution.

Je ne vois pas l'utilité de l'insert de blocage si il n'y a aucune ligne dans la table enfant...

Je suis juste essayer de faire un un-à-plusieurs de la relation...

(Je sais que je peux utiliser les REJOINDRE, mais je suis en train d'utiliser le tableau des relations, de l'intégrité des données et également sous la forme de métadonnées pour PHP)

OriginalL'auteur Rolf | 2010-08-23