SQLite: Insert into weak entity table (或者如何获取刚刚插入的定义实体的ID)
SQLite: Insert into weak entity table (or how to get the just-inserted defining entity's ID)
我正在努力将正确的键值插入弱实体以及插入定义强实体。
这两个实体:
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'),
...
我需要将关键元数据插入 table 'key' 并将相应的关键数据插入 table 'key_data_rsa',最好是在一个查询中。
据我了解,条目'key'必须在插入'key_data_rsa'条目之前插入,因为'key'的'id'必须先存在。
问题是,如果我分两步执行此操作,我会忘记 'key' 条目 - 'key' 唯一保证的唯一键是它的 'id' 并且尽快当它被插入时,我将无法再次 select 它以获得 'id'。
在这种情况下如何向弱实体插入数据以保持与强实体的正确连接?
请不要评论或质疑方案和用例,除非它们有严重错误。谢谢
-m.
函数last_insert_rowid()
应该有帮助。它returns最近一次成功插入table的rowid;在您的情况下,列 id
属于 INTEGER PRIMARY KEY
类型,因此被视为 rowid 的别名(参见 sqlite core functions)
从弱实体引用刚刚插入的强实体应该按如下方式工作:
insert into key values (null, ...);
insert into key_data_rsa values (last_insert_rowid(), ...);
我正在努力将正确的键值插入弱实体以及插入定义强实体。
这两个实体:
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'),
...
我需要将关键元数据插入 table 'key' 并将相应的关键数据插入 table 'key_data_rsa',最好是在一个查询中。
据我了解,条目'key'必须在插入'key_data_rsa'条目之前插入,因为'key'的'id'必须先存在。
问题是,如果我分两步执行此操作,我会忘记 'key' 条目 - 'key' 唯一保证的唯一键是它的 'id' 并且尽快当它被插入时,我将无法再次 select 它以获得 'id'。
在这种情况下如何向弱实体插入数据以保持与强实体的正确连接?
请不要评论或质疑方案和用例,除非它们有严重错误。谢谢
-m.
函数last_insert_rowid()
应该有帮助。它returns最近一次成功插入table的rowid;在您的情况下,列 id
属于 INTEGER PRIMARY KEY
类型,因此被视为 rowid 的别名(参见 sqlite core functions)
从弱实体引用刚刚插入的强实体应该按如下方式工作:
insert into key values (null, ...);
insert into key_data_rsa values (last_insert_rowid(), ...);