How to use an auto incremented primary key as a foreign key as well?

Вот что я пытаюсь сделать:

У меня есть 2 таблицы ...

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;

И затем ограничение:

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

Как вы можете посмотрите, что у родительского стола есть автоинкрементный первичный ключ "id", который также используется в качестве внешнего ключа для дочерней таблицы.

Теперь я хочу вставить запись в родительскую таблицу, например так:

INSERT INTO parent SET DATA="abc";

И происходит ошибка с ошибкой:

Невозможно добавить или обновить дочернюю строку: a ограничение внешнего ключа не выполнено ( myschema . parent , CONSTRAINT parent_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ ( id ) REFERENCES child (parent_id))

I understand that it fails because it doesn't find a referred record in the child table. If I start by creating a record in the child table, set it's parent_id to 1, then reset the auto-increment counter of the parent table (so that the next insert will have id = 1), it works! But that's not a solution.

I don't see the utility of the insert blocking if there is no related row in the child table...

I'm just trying to do a one-to-many relationship...

(I know I can use JOIN, but I'm trying to use table relations, for data integrity and also as metadata for PHP)

6
задан Rolf 29 March 2019 в 15:10
поделиться