Sql 插入记录,然后更新另一个表
我正试图思考如何有效地将数据插入到事先没有所有信息的表中 我有两个表,Sql 插入记录,然后更新另一个表,sql,sqlite,triggers,insert,primary-key,Sql,Sqlite,Triggers,Insert,Primary Key,我正试图思考如何有效地将数据插入到事先没有所有信息的表中 我有两个表,Table1和Table2Table2的主键是一个自动递增的int。该int用作行的ID,并且位于Table1的列中(不是唯一的,因此Table1中的多条记录可以具有相同的Table2.ID)。问题是,如何将新记录插入自动填写相关Table2.ID值的Table1 我的逻辑是: 搜索表2,查看记录是否存在 如果存在,则返回ID值并在表1中插入具有该ID值的新记录 如果不存在,请在表2中插入新记录并返回ID 在相关的表1列中插入
Table1
和Table2
Table2
的主键是一个自动递增的int。该int用作行的ID,并且位于Table1
的列中(不是唯一的,因此Table1
中的多条记录可以具有相同的Table2.ID
)。问题是,如何将新记录插入自动填写相关Table2.ID
值的Table1
我的逻辑是:
表2
,查看记录是否存在李>
类型
,表1将被称为电影
,所有表均为空。流派PK(自动int)将链接到电影
表中的流派列(int)。Film
表没有存储流派文本版本的varchar
列,只有int列
我插入一部新的电影
录制,并将恐怖片
作为电影类型传入。但是,此时,类型
表中没有恐怖
记录,因此没有可以插入电影
表的类型列的int值
因此,从我的观点来看(这可能是低效的,因为我不太熟悉SQL),我需要先将
恐怖
类型插入类型
表中,以某种方式获取新创建的ID,然后将该ID插入新创建的电影
记录的类型
列中。当我添加第二部恐怖电影时,ID已经存在于类型表中,因此SQLite应该获取该ID并为我将其放入新的电影
记录中。这可能吗?无法将字符串'Horror'
传递到电影表的插入命令中,因为该表没有这样的列
在像SQLite这样的嵌入式数据库中,没有存储过程,因为在您自己的程序中实现逻辑的效率不会降低
所以你自己去做吧;该程序如下所示:
cursor=db.executeQuery('SELECT id FROM Genre WHERE name=?',['Horror']))
如果cursor.hasSomeRecord:
genreID=cursor['id']
其他:
db.executeCommand('插入类型(id,name)值(NULL,,),['Horror']))
genreID=db.last\u insert\u rowid()
db.executeCommand('插入电影(名称、流派)值(?,),['…,genreID])
如果对流派(名称)
字段有唯一的约束,则可以轻松插入流派,同时自动避免重复:
插入或忽略到流派(名称)
价值观(“恐怖”);
插入电影(名称、类型)
值(“…”,(从名称为“恐怖”的类型中选择id);
两张反对票?你能解释一下为什么我可以改进这个问题吗?请为每种情况举例。@CL。很抱歉问题不清楚。我不允许谈论我正在进行的项目,但希望我给出的例子能澄清问题。我仍然是SQL的初学者,所以这里可能缺少一些明显的方面。ThanksI不确定是否有一种存储过程式的触发器方法,我看到的大多数例子都提到SQL Server/MySQL。我想应该是手动的。谢谢。是的,我有一个独特的约束,所以这个方法看起来更好。