【发布时间】:2012-10-05 11:36:39
【问题描述】:
我正在努力思考如何有效地将数据插入到事先没有所有信息的表中。
我有两张桌子,Table1 和 Table2。 Table2 的主键是一个自动递增的 int。这个int作为行的ID,也在Table1的列中(不是唯一的,所以Table1中的多条记录可以有相同的Table2.ID)。问题是,我如何插入一个新的记录到Table1自动填入相关的Table2.ID值?
我的逻辑是:
- 搜索
Table2以查看记录是否存在。 - 如果存在,则返回 ID 值并在 Table1 中插入具有该 ID 值的新记录
- 如果不存在,则在Table2中插入新记录并返回ID
- 将新 ID 插入相关的 Table1 列中
是否可以让 SQLite 自动插入相关 ID 而不是我必须在代码中执行此操作(四处阅读,我遇到过触发器,但不确定如何使用它们或者它们是否在这里有用) ?
用示例更新问题(我不允许讨论我正在开发的实际游戏的各个方面,但这个虚构的示例具有相似的性质)
表 2 将被称为 Genre,表 1 将被称为 Film,所有表都是空的。 Genre PK (auto int) 将链接到 Film 表中的 Genre 列 (int)。 Film 表没有 varchar 列来存储流派的文本版本,只有 int 列。
我插入一个新的Film 记录并传入Horror 作为流派。但是此时Genre表中没有Horror记录,所以Film表的genre列中没有可以插入的int值。
因此,在我看来(这可能效率低,因为我不熟悉 SQL),我需要先将 Horror 类型插入到 Genre 表中,以某种方式获取新创建的 ID,然后将该 ID 插入到新创建的 Film 记录的 genre 列中。当我添加第二个 Horror 电影时,该 ID 已经存在于 Genre 表中,因此 SQLite 应该使用该 ID 并将其放入新的 Film 记录中。这可能吗?
【问题讨论】:
-
两张反对票?您能否解释一下原因,以便我改进问题?
-
请给出每个案例的例子。
-
@CL。对不起,不清楚的问题。我不允许谈论我正在从事的项目,但希望我给出的例子可以解决问题。我仍然是 SQL 的初学者,所以我可能在这里遗漏了一些明显的方面。谢谢
标签: sql sqlite triggers insert primary-key