SQLite: вставка в таблицу слабых объектов (или как получить идентификатор только что вставленного определяющего объекта)

Я пытаюсь вставить правильное значение ключа в слабую сущность вместе со вставкой определяющей сильной сущности.

Эти две сущности:

CREATE TABLE 'key' (
'id' INTEGER NOT NULL  PRIMARY KEY AUTOINCREMENT,
...

CREATE TABLE 'key_data_rsa' (
'id_key' INTEGER NOT NULL  PRIMARY KEY REFERENCES 'key' ('id'),
...

Мне нужно вставить ключевые метаданные в таблицу 'key' и соответствующие данные ключа в таблицу 'key_data_rsa', предпочтительно в одном запросе.

Как я понимаю проблему, запись "ключ" должна быть вставлена ​​до того, как будет вставлена ​​запись "ключ_данные_rsa", потому что сначала должен существовать "идентификатор" "ключа".

Проблема в том, что если я сделаю это в два шага, я потеряю запись "ключ" - единственный гарантированный уникальный ключ "ключ" - это его "идентификатор", и как только он будет вставлен, я не смогу выберите его снова, чтобы получить идентификатор.

Как мне вставить данные в слабый объект в этом сценарии, чтобы сохранить правильную связь с сильным объектом?

Пожалуйста, воздержитесь от комментирования или опроса схемы и варианта использования, если с ними что-то серьезно не так. Благодарю.

-m.

1 ответ

Решение

Функция last_insert_rowid() должно помочь Возвращает rowid последней успешной вставки в таблицу с rowid; в вашем случае колонка id имеет тип INTEGER PRIMARY KEY и поэтому рассматривается как псевдоним для rowid (см. основные функции sqlite)

Ссылаясь на сильную сущность, которая только что была вставлена, от слабой сущности должна работать следующим образом:

insert into key values (null, ...);
insert into key_data_rsa values (last_insert_rowid(), ...);
Другие вопросы по тегам