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(), ...);