2014-02-09 58 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

相关问题