我有一个带有自动增量代理键的表。我想用它作为我的另一个表的外键。问题是,我不知道如何将它引用到该表,因为几乎不可能确定我必须引用的内容(代理键的实际值)。
请注意,我想做的是通过我的程序(在数据库管理系统之外)添加元组/记录。流程为:
在Table1中添加一条新记录并生成自增键。更新
在 Table2 中添加一条新记录,并将其外键引用到 Table1 的主键。更新
我的问题是:如果我不知道外键是什么,我该如何存储它?
编辑:
很抱歉没有指定数据库并且回复很长。我使用微软sql服务器。
最佳答案
如果您的 DBMS 支持序列(大多数现代 DBMS 都支持),只需生成 table1 的 PK 值,然后使用 DBMS 的“currval”功能引用该 FK 值即可。
类似于(PostgreSQL 语法,但其他 DBMS 支持序列具有非常相似的功能):
INSERT INTO table1 (id, col1, col2)
VALUES (nextval('id_sequence'), 'foo', 'bar');
INSERT INTO table2 (t1_id, col1)
VALUES (currval('id_sequence'), 'foobar');
另一种选择是简单地获取程序中的 ID 值,然后在两个插入中使用该值。
如果您必须处理不支持序列的 DBMS(例如 2012 年之前的 MySQL 或 SQL Server),通常有一个函数(例如 SQL Server 的 @@IDENTITY
)可以让您引用第二个 INSERT 语句中生成的 table1 ID 值(而不是 currval 调用)
关于sql-server - 引用代理键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866317/