【问题标题】:Inserting 2 rows, each to different tables where one row refrences the other's primary key插入 2 行,每行到不同的表,其中一行引用其他主键
【发布时间】:2011-06-11 16:30:17
【问题描述】:

大家好 看看这个场景

表 1 列 -> | table_1_id (pkey) |一些列 |厘米 |

表 2 列 -> | table_2_id (pkey) | some_other_column | table_1_id (fkey) |厘米 |

所有主键都是序列号或自动编号类型。 表 2 的第 3 列是一个引用表 1 主键的​​ fk。

我想以编程方式将行插入到两者中(来自 c++ 应用程序)

我是否必须先插入表 1,然后选择查询条目的主键,然后插入表 2 的行和 pkey 结果?

有没有更有效的方法来处理这个问题?假设使用了将近 2 个查询?

【问题讨论】:

    标签: sql postgresql insert foreign-key-relationship


    【解决方案1】:

    我建议看http://wiki.postgresql.org/wiki/FAQ

    该站点是熟悉 PostgreSQL 的有用资源

    具体来说,如何获得 SERIAL 插入的值?

    部分

    最简单的方法是检索 用 RETURNING 分配 SERIAL 值。 使用示例表 上一个问题,看起来像 这个:

    插入人(姓名)值 ('Blaise Pascal') 返回 id;

    您也可以调用 nextval() 并在 INSERT 中使用该值,或在 INSERT 之后调用 currval()。

    【讨论】:

    • 我同意:使用RETURNING 是最安全的方法。
    【解决方案2】:

    如果您的应用程序中不需要 table_1_id 值,您可以完全跳过检索它:

    INSERT INTO table_1(cols...) VALUES(vals...)
    INSERT INTO table_2(table_1_id, cols...) VALUES(currval('table_1_table_1_id_seq'), vals...)
    

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多