У меня есть две таблицы MonetDB с использованием auto-increment для генерации уникальных идентификаторов для каждой строки. Каждая строка в ребенка таблицы относится к одной строке в родительской таблицы (моделирование 1: N отношений):Как правильно реализовать AUTO_INCREMENT в MonetDB?
CREATE SEQUENCE "test"."seq_parent" as integer START WITH 1;
CREATE TABLE "test"."parent" (
"id" INT NOT NULL DEFAULT next value for "test"."seq_parent",
"name" STRING,
PRIMARY KEY ("id")
);
CREATE SEQUENCE "test"."seq_child" as integer START WITH 1;
CREATE TABLE "test"."child" (
"id" INT NOT NULL DEFAULT next value for "test"."seq_child",
"parent_id" INT NOT NULL,
"name" STRING,
PRIMARY KEY ("id")
);
Когда я импортировать (родитель, child_1, ..., child_n) кортежи в эту базу данных , Мне нужно сначала до INSERT
родителя, а затем INSERT
всех детей, использующих ID родительского объекта, который я только что создал.
Проблема: Как получить идентификатор строки, которую я просто INSERTed
? В MySQL для этого есть LAST_INSERT_ID()
. Однако я не мог найти что-то подобное в MonetDB.
Я пробовал SELECT next value for "test"."seq_parent"
, который дает идентификатор, но увеличивает последовательность в одно и то же время. Я также попробовал SELECT MAX("id") FROM "test"."parent"
сразу после выполнения INSERT
, но это хрупко, поскольку он ломается, если подключен другой клиент и вставляет данные в родительскую таблицу одновременно.
В моем случае проблема действительно может быть решена комбинацией кода приложения и последовательности MonetDB. Иногда не видно очевидного решения. Спасибо, что указали это! – dasup