在 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 个表中插入数据。如何?的主要内容,如果未能解决你的问题,请参考以下文章
Jooq 一次将 one2one 和 one2many 关系数据插入到 2 个表中。如何处理问题和回滚