我有一個具有自動增量代理鍵的表。我想用它作爲另一個表的外鍵。事情是,我不知道如何將它引用到該表中,因爲幾乎不可能確定我必須引用的內容(代理鍵的實際值)。引用代理鍵
請注意,我想要做的是通過我的程序(在dbms之外)添加元組/記錄。過程如下:
在Table1中添加新記錄並生成自動增量密鑰。更新
在Table2中添加一條新記錄並將其外鍵引用到Table1的主鍵。更新
我的問題是:如果我不知道它是什麼,我如何存儲外鍵?
編輯:
對不起,不指定數據庫和長期的答覆。我使用微軟的SQL服務器。
我有一個具有自動增量代理鍵的表。我想用它作爲另一個表的外鍵。事情是,我不知道如何將它引用到該表中,因爲幾乎不可能確定我必須引用的內容(代理鍵的實際值)。引用代理鍵
請注意,我想要做的是通過我的程序(在dbms之外)添加元組/記錄。過程如下:
在Table1中添加新記錄並生成自動增量密鑰。更新
在Table2中添加一條新記錄並將其外鍵引用到Table1的主鍵。更新
我的問題是:如果我不知道它是什麼,我如何存儲外鍵?
編輯:
對不起,不指定數據庫和長期的答覆。我使用微軟的SQL服務器。
如果你的數據庫管理系統支持序列(大多數現代數據庫管理系統都是這樣做的),只需爲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值,然後在兩個刀片使用該值。
如果您不得不處理不支持序列的數據庫管理系統(例如2012年之前的MySQL或SQL Server),通常會有一個函數(例如SQL Server的@@IDENTITY
),它允許您參考生成的表1的ID值第二個INSERT語句(而不是currval調用)
哇,非常快的回覆。我會檢查@@ IDENTITY,我相信這是最好的解決方案。謝謝! – Arman
既然你沒有提到你的數據庫軟件的名稱,因爲你的問題似乎並不怎麼申報代理鍵,您可以:
您正在使用哪些RDBMS? – 2012-06-02 22:13:45
這取決於您正在使用的數據庫。你沒有指定 - MySQL,Oracle還是什麼? – codingbiz
微軟sql server – Arman