【问题标题】:SQLite: Insert into weak entity table (or how to get the just-inserted defining entity's ID)SQLite:插入弱实体表(或如何获取刚刚插入的定义实体的ID)
【发布时间】:2016-12-11 21:47:12
【问题描述】:

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

这两个实体:

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”。

在这种情况下如何向弱实体插入数据以保持与强实体的正确连接?

请不要评论或质疑方案和用例,除非它们有严重错误。谢谢。

-米。

【问题讨论】:

  • 您使用什么语言访问数据库?
  • Perl DBI。这有什么关系?
  • 检查stackoverflow.com/questions/6242756/…,看看你是否可以在Perl中应用相同的逻辑(这使得@CL.question相关)
  • 这对我来说与 perl 无关,因为我不使用这种程序化方法,但在 cmets 中我找到了与 SQLite 相关的实际解决方案 - last_insert_rowid() 函数。与此同时,下面的 Stephan Lechner 也提出了同样的观点。所以谢谢,即使可能不是预期的那样,评论也很有用:)
  • 最后插入rowid但作为光标的属性

标签: sql sqlite sql-insert weak-entity


【解决方案1】:

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

从弱实体引用刚插入的强实体应该如下工作:

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

【讨论】:

  • 是的,正是我要找的东西 :) 按照 Dudu Markovitz 在问题下方在 cmets 中提出的提示,刚刚找到了相同的解决方案。
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 2011-07-31
  • 2014-04-19
  • 1970-01-01
  • 2014-08-23
  • 2017-07-04
  • 2011-01-18
  • 2011-07-11
相关资源
最近更新 更多