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
    ,查看记录是否存在
  • 如果存在,则返回ID值并在表1中插入具有该ID值的新记录
  • 如果不存在,请在表2中插入新记录并返回ID
  • 在相关的表1列中插入新ID
  • 有没有可能让SQLite自动插入相关的ID,而不是我在代码中这样做(通读一遍,我遇到过触发器,但不确定如何使用它们,或者它们在这里是否有用)

    用示例更新问题(我不允许讨论我正在进行的实际游戏的各个方面,但这个虚构的示例具有类似的性质)

    表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。我想应该是手动的。谢谢。是的,我有一个独特的约束,所以这个方法看起来更好。