2017-01-10 3 views
0

У меня есть две таблицы 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, но это хрупко, поскольку он ломается, если подключен другой клиент и вставляет данные в родительскую таблицу одновременно.

ответ

1

Если вы можете использовать код приложения, сделайте это. Сначала запустите запрос, чтобы получить следующее значение из seq_parent. Затем установите его в переменную. Затем используйте эту переменную во всех соответствующих командах вставки.

+0

В моем случае проблема действительно может быть решена комбинацией кода приложения и последовательности MonetDB. Иногда не видно очевидного решения. Спасибо, что указали это! – dasup

 Смежные вопросы

  • Нет связанных вопросов^_^