在 SQLite 中同时向 4 个表中插入数据。如何?

Posted

技术标签:

【中文标题】在 SQLite 中同时向 4 个表中插入数据。如何?【英文标题】:Inserting data into 4 tables at the same time in SQLite. How? 【发布时间】:2015-01-07 22:06:27 【问题描述】:

我的数据库有 1 个表,它与 3 个其他表具有一对多的关系。其他 3 个表中的外键是“主”表中的主键。

所以现在当我提交到理想的数据库时,我会先插入主表,然后再插入其他三个表,但要使用正确的键。

那我为什么不这样做呢?

因为主表中的主键在 SQLite 中是一个未定义的 INTEGER PRIMARY KEY,所以它是一个自增数。我不知道当我插入表格时会是什么。

我知道一种方法是插入我自己的主键,但这意味着首先在表中查询最新的主键。

有什么好办法吗?

【问题讨论】:

你考虑过 last_insert_rowid() 吗? 根据您使用的API,通常有一种方法可以在插入后获取自增数字的值。例如,在 JDBC 中有 Statement.getGeneratedKeys() 是的,您使用什么绑定来访问 SQLite?通常你要做的是创建一个事务,并在该事务中首先插入主行,通过last_insert_rowid() 获取生成的 ID,然后使用该值插入其他三行,然后提交事务。 大多数 DBMS 在建立关系之前要求记录存在。您可能可以使用 last_insert_rowid() 做一些事情,但我怀疑它会转化为任何其他 DBMS。 我可以使用 last_insert_rowid() 以某种方式从最后插入的 INSERT 中获取主键,并且只获取 SQLite 默认的 rowid 标识符吗? 【参考方案1】:

您可以在这里阅读:https://www.sqlite.org/autoinc.html(在大多数情况下)主键中的 rowid 和整数是相同的:

在 SQLite 中,类型为 INTEGER PRIMARY KEY 的列是 ROWID 的别名(除了 WITHOUT ROWID 表),它始终是 64 位有符号整数。

【讨论】:

我错过了。谢谢。

以上是关于在 SQLite 中同时向 4 个表中插入数据。如何?的主要内容,如果未能解决你的问题,请参考以下文章

如何向 MSSQL 表中插入超过 10000 行

Jooq 一次将 one2one 和 one2many 关系数据插入到 2 个表中。如何处理问题和回滚

用java 写向两个表同时插入数据,第二个表的一个字段是取第一个表的ID值

怎么向sqlite数据库里插数据?

sql如何同时向两张表插入数据

向 SQLite 后端添加内容时更新表