【发布时间】: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 标识符吗?