Это то, что я пытаюсь сделать:Как использовать автоматически увеличивающийся первичный ключ как внешний ключ?
У меня есть 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";
И с ошибкой:
Cannot add or update a child row: a foreign key constraint fails (
anacorbero
.parent
, CONSTRAINTparent_ibfk_1
FOREIGN KEY (id
) REFERENCESchild
(parent_id
))
Я понимаю, что это терпит неудачу, потому что не находит указанная запись в дочернем столе. Если я начну с создания записи в дочерней таблице, установите ее parent_id равным 1, а затем сбросьте счетчик автоматического инкремента родительской таблицы (так что следующая вставка будет иметь id = 1), она работает! Но это не решение.
Я не вижу полезность вставки блокировки, если нет связанных строк в дочерней таблице ...
Я просто пытаюсь сделать один-ко-многим ...
(я знаю, что могу использовать JOIN, но я пытаюсь использовать таблицу отношений, для обеспечения целостности данных, а также в качестве метаданных для PHP)
+1: Я понял, что неправильно понял вопрос, когда прочитал ваш ответ. –
Спасибо за быстрый ответ. Я сам это понял! – Rolf
Я уже определил идентификатор в SQL Server 2012, но я пытаюсь передать некоторое значение db. Итак, в этом месте (с автоинкрементами), что мне нужно пройти? –