Как использовать автоматически увеличенный первичный ключ в качестве внешнего ключа?
Вот что я пытаюсь сделать:
У меня есть 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";
И это терпит неудачу с ошибкой:
Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (anacorbero
.parent
, ОГРАНИЧЕНИЕparent_ibfk_1
ИНОСТРАННЫЙ КЛЮЧ (id
) РЕКОМЕНДАЦИИchild
(parent_id
))
Я понимаю, что это терпит неудачу, потому что это не находит упомянутую запись в дочерней таблице. Если я начну с создания записи в дочерней таблице, установите для ее parent_id значение 1, а затем сбросьте счетчик автоинкремента родительской таблицы (чтобы следующая вставка имела идентификатор = 1), это работает! Но это не решение.
Я не вижу полезности блокировки вставки, если в дочерней таблице нет связанной строки ...
Я просто пытаюсь установить отношения один-ко-многим ...
(Я знаю, что могу использовать JOIN, но я пытаюсь использовать табличные отношения для целостности данных, а также в качестве метаданных для PHP)