插入 2 行,每行插入不同的表,其中一行引用另一行的主键

发布于 2024-10-13 09:27:52 字数 308 浏览 5 评论 0原文

大家好 查看此场景

表 1 列 -> |表_1_id(pkey)|一些_列 |评论 |

表2栏-> |表_2_id(pkey)|一些其他列 |表_1_id (fkey) |评论 |

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

我想以编程方式(从 C++ 应用程序)将行插入到两个表中,

我是否必须插入表一,然后 SELECT 查询条目的主键,然后插入带有 pkey 结果的表 2 行?

有没有更有效的方法来处理这个问题?比如说使用几乎 2 个查询?

Hello folks
Checkout this scenario

Table 1 columns -> | table_1_id (pkey) | some_column | comments |

Table 2 columns -> | table_2_id (pkey) | some_other_column | table_1_id (fkey) | comments |

All primary keys are of type serial or auto number.
The 3rd column on Table 2 is an fk that references Table 1's primary key.

I would like to insert rows into both programmaticaly (from a c++ app)

Do i have to insert to table one then SELECT-query the entry's primary key then insert the Table 2 row with the pkey result?

Is there a more efficient way of handling this? Say using almost 2 queries?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放飞的风筝 2024-10-20 09:27:52

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

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

具体来说,如何获取 SERIAL 插入的值?部分

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

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

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

I would suggest looking http://wiki.postgresql.org/wiki/FAQ

The site is a useful resource to go through to get familiar with PostgreSQL

Specifically, the section How do I get the value of a SERIAL insert?

The simplest way is to retrieve the
assigned SERIAL value with RETURNING.
Using the example table in the
previous question, it would look like
this:

INSERT INTO person (name) VALUES
('Blaise Pascal') RETURNING id;

You can also call nextval() and use that value in the INSERT, or call currval() after the INSERT.

偷得浮生 2024-10-20 09:27:52

如果您的应用程序中不需要 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...)

If you don't need the table_1_id value in your application, you can skip retrieving it completely:

INSERT INTO table_1(cols...) VALUES(vals...)
INSERT INTO table_2(table_1_id, cols...) VALUES(currval('table_1_table_1_id_seq'), vals...)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文