我有一张具有自动增量代理键的表。我想用它作为我的另一个表的外键。问题是,我无法弄清楚如何将它引用到该表中,因为几乎不可能确定我必须引用的内容(代理键的实际值)。
请注意,我要做的是通过我的程序(在dbms之外)添加元组/记录。这个过程是:
在Table1中添加新记录并生成自动增量密钥。更新
在Table2中添加一条新记录,并将其外键引用到Table1的主键。更新
我的问题是:如果我不知道它是什么,我如何存储外键?
修改
很抱歉没有指定数据库和长回复。我使用的是microsoft sql server。
答案 0 :(得分:1)
由于您没有提到数据库软件的名称,并且由于您的问题似乎不是如何声明代理键,您可以:
答案 1 :(得分:1)
如果您的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
),它允许您引用生成的ID值第二个INSERT语句中的table1(而不是currval调用)