2012-04-10 74 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