Como usar uma chave primária incrementada automaticamente como chave estrangeira também?
Isto é o que estou tentando fazer:
Eu tenho 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;
E então uma restrição:
ALTER TABLE `parent` ADD FOREIGN KEY (`id`) REFERENCES `child` (`parent_id`);
Como você pode ver, a tabela pai possui uma chave primária incrementada automaticamente "id", que também está sendo usada como uma chave estrangeira para a tabela filha.
Agora eu quero inserir um registro na tabela pai, assim:
INSERT INTO parent SET DATA="abc";
E falha com erro:
Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha (anacorbero
.parent
, RESTRIÇÃOparent_ibfk_1
CHAVE ESTRANGEIRA (id
) REFERÊNCIASchild
(parent_id
)))
Entendo que ele falha porque não encontra um registro referido na tabela filho. Se eu começar criando um registro na tabela filho, defina parent_id como 1 e redefina o contador de incremento automático da tabela pai (para que a próxima inserção tenha id = 1), funcionará! Mas isso não é uma solução.
Não vejo o utilitário do bloqueio de inserção se não houver nenhuma linha relacionada na tabela filho ...
Eu só estou tentando fazer um relacionamento um-para-muitos ...
(Eu sei que posso usar JOIN, mas estou tentando usar relações de tabela, para integridade de dados e também como metadados para PHP)