代码之家  ›  专栏  ›  技术社区  ›  Steven Chong

如何插入与序列生成的技术主键的n:m关系?

  •  0
  • Steven Chong  · 技术社区  · 15 年前

    假设我有两个具有多个字段的表,每个表中都有一个主键,它是由数据库序列生成的技术ID:

    table1             table2
    -------------      -------------
    field11  <pk>      field21  <pk>
    field12            field22
    

    field11 field21 由序列生成。

    此外,在 table1 UND table2 ,设计于 table3 :

    table3
    -------------
    field11  <fk>
    field21  <fk>
    

    入侵检测系统中的入侵检测系统 表1 UND 表2 在插入语句期间生成:

    INSERT INTO table1 VALUES (table1_seq1.NEXTVAL, ...
    INSERT INTO table2 VALUES (table2_seq1.NEXTVAL, ...
    

    因此,我不知道在程序的数据访问层中添加的行的主键,因为 pk 完全在数据库中发生。

    最新的最佳实践是什么 表3 现在?如何访问刚刚插入的行的主键?

    2 回复  |  直到 15 年前
        1
  •  0
  •   nvogel    15 年前

    这些表没有另一个(非代理)候选键吗?一般来说,将代理项密钥作为 只有 任何桌子的钥匙。假设您有其他键,则可以使用该键检索插入的行。

        2
  •  0
  •   Steven Chong    15 年前

    如果您面临这个问题,并且使用ibator ibatis框架作为dao层(就像我们所做的那样),那么您可以使用 <generated-key> -在ibator.config中标记。

    一般来说,解决这个问题的方法是

    SELECT sequencename.nextval FROM tablename
    

    在名为 tablename 使用序列 sequencename 获取要插入的值的下一个键。

    PS:这里不需要注意事务处理,因为 nextval -函数将返回下一个sequencevalue。