2012-04-10 93 views
0

下面是這種情況: 我有2級表和2個臨時表。在我將用戶數據插入官方表格之前,我將它們插入臨時表格以讓他們進行檢查。有一個company表與公司信息,和contact表有聯繫信息。該contact表有一個稱爲company_id場這對company表的外鍵索引。MySQL的 - 插入與外鍵索引

臨時表設置相同的方式。

我想要做的事,如:INSERT INTO company() SELECT * FROM temp_company;INSERT INTO contact() SELECT * FROM temp_contact

我的問題是,我該如何從temp_company外鍵轉移到新插入的ID使用這樣的語句company表?有沒有辦法做到這一點?

目前我:

  1. 一個抓住了臨時行
  2. 去一個和插入他們
  3. 抓住了最後一個插入ID
  4. 然後用新的最後插入ID插入接觸之後

我只是不知道這是否是最有效的方式。謝謝!

回答

0

,如果你有相同數量的兩個表中的列,然後你就應該能夠使用你有沒有語法?只需拿出()。只要確保沒有任何重複的主鍵:

INSERT INTO company SELECT * FROM temp_company; 
INSERT INTO contact SELECT * FROM temp_contact; 

你也可以專門指定插入得到的列,這樣可以指定正是你插入作爲新的ID哪一列。

INSERT INTO company (`ID`,`col_1`,...,`last_col`) SELECT `foreign_key_col`,`col_1`,...,`last_col` FROM temp_company; 
INSERT INTO contact (`ID`,`col_1`,...,`last_col`) SELECT `foreign_key_col`,`col_1`,...,`last_col` FROM temp_contact; 

只要確保您選擇正確的列數。

+0

唯一的問題是我沒有用臨時表數據填充一個空表。我將行添加到已經有一堆數據的表中。 – 2012-04-10 20:13:49

+0

對那應該沒問題,是你不知道在插入前是否有重複鍵的問題?如果是這樣的話,那麼你可以使用'INSERT ... ON DUPLICATE KEY UPDATE'或'INSERT ... ON DUPLICATE KEY INGNORE'語法,這取決於你想要做什麼。 – 2012-04-12 11:59:26