2014-02-09 86 views
1

我有19個表都有一個名爲CompanyID的列設置爲引用company表的主鍵CompanyID設置爲auto_increment。爲所有條目自動創建ID到具有相同外鍵的表中

有沒有一種方法可以插入所有表中,而不必在每個查詢中指定CompanyID?因此,如果我先插入company表,它將自動獲得一個CompanyID,並且我需要使用它來插入到其他19個表中,但是如何獲取此信息?

我能想到的唯一方法是使用php自動生成一個ID,但我不喜歡這種方法,因爲它不會遵循我想要使用的1,2,3約定。另外一種方法是將信息插入到company中,插入後將其選中,並將公司名稱與CompanyID相匹配,並將其設置爲我的腳本中的變量,但這似乎是很多額外的廢話。有沒有更好的辦法?希望這是有道理的。

+0

'SELECT @myid = LAST_INSERT_ID();'? (但是如果你告訴我們你使用了_which_mysql接口,我們可能會給你一個更好的選擇)。 – Wrikken

+0

通過界面你的意思是phpmyadmin或PDO? – Yamaha32088

+0

'PDO'是我尋找的答案:)。 ['PDO :: lastInsertId()'](http://www.php.net/manual/en/pdo.lastinsertid.php)是一個更好的選擇,然後手動搜索或運行該查詢。請注意,edcaracas建議將其製作成一個程序並不是一件壞事。 – Wrikken

回答

1

您使用last_insert_id();

例如

INSERT INTO company .... 

$id = SELECT last_insert_id(); 

INSERT INTO othertable (company_id) VALUES ($id) 
INSERT INTO yetanothertable (company_id) VALUES ($id) 
其處理MySQL將有一些專用的功能/方法來獲得這個ID,而不必做一個全面的查詢,但基本的機制將在所有庫相同

大多數DB庫 - 插入你的「核心「記錄,用last_insert_id()類型的調用檢索自動生成的ID,然後在所有子記錄插入中使用檢索到的ID。

+0

如果另一個人在我插入公司之後立即添加一個條目,它會在獲取last_insert_id並獲取錯誤的ID之前添加一個條目,這是否有可能? – Yamaha32088

+0

last_insert_id()特定於您與db的連接。它只會報告您執行的LAST插入的ID。否則就沒用了。 –

+0

好的真棒!謝謝 – Yamaha32088

相關問題