SQLite:插入弱实体表(或如何获取刚刚插入的定义实体的ID)

时间:2016-12-11 21:47:13

标签: sql sqlite sql-insert weak-entity

我正在努力为弱实体插入正确的键值以及插入定义的强实体。

这两个实体:

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',最好是在一个查询中。

正如我所理解的那样,必须在插入'key_data_rsa'条目之前插入条目'key',因为'key'的'id'必须首先存在。

问题在于,如果我分两步执行此操作,我就会忘记'key'条目 - 'key'唯一保证的唯一键是'id',一旦插入,我就不会能够再次选择它以获得'id'。

如何在此方案中向弱实体插入数据以保持与强实体的正确连接?

请不要评论或质疑该计划和用例,除非有严重错误。感谢。

-m

1 个答案:

答案 0 :(得分:1)

函数last_insert_rowid()应该有所帮助。它将最近成功插入的rowid返回到带有rowid的表中;在您的情况下,列id的类型为INTEGER PRIMARY KEY,因此被视为rowid的别名(cf. sqlite core functions

引用一个刚刚插入的强实体,来自弱实体应该如下工作:

insert into key values (null, ...);
insert into key_data_rsa values (last_insert_rowid(), ...);