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