我想在地址表(子表)插入员工ID - 一个很多概念

问题描述:

我正在使用Java Jdbc connection我想在地址表(子表)插入员工ID - 一个很多概念

我的问题很简单,我插在员工表 防爆员工记录:

Insert into employee (emp_id,emp_name) values(10,'hello'); 

我怎么能取的子表(address)外键,插入呢?

如果我使用select max(emp_id) from employee并将该ID插入到子表 恐怕如果有多人尝试将值插入到employee表中并且有可能我会为孩子获取错误的员工ID表。 是否有任何可能的方法将员工ID插入到子表中。

注:我需要如何插入子表中的雇员ID的SQL查询

+0

子表示例:插入地址(foreignkey_employee_id,door_no,街道名称); – Shiva

+0

是的,我只需要自动增量 – Shiva

如果将记录插入包含AUTO_INCREMENT列一个表,你可以获取通过调用存储在该列中的值mysql_insert_id()函数。

更多细节参考此链接

https://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

+0

OP想拥有JAVA,而不是PHP? –

+0

问题应该是标签mysql .. –

+0

这个问题被标记为'JAVA',因此OP希望有一个JAVA代码,而不是一个PHP函数。 'mysql_insert_id()'不是任何JAVA“函数”(因为在JAVA中根本没有函数)。手册中的链接示例显示了一个“C”代码片段。 –

你需要做两件事情。

假定,在employee你的主键是名为emp_id和AUTO_INCREMENT你插入像Insert into employee (emp_id,emp_name) values(10,'hello');大功告成:外键是10

但是:如果它是一个真正的AUTO_INCREMENT,你不能为其指定的任何值:

Insert into employee (emp_name) values('Veronica');

然后你可以检索由驾驶员或后续的SQL最后生成的emp_id值声明。在Java中,你需要告诉司机,你想有最后生成的ID回:

PreparedStatement pst = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 

然后您就可以获取生成的主键:

ResultSet rset = pst.getGeneratedKeys(); 
Long emp_id; 
if (rset.next()) { 
    emp_id = rset.getLong(1); 
} 

现在Long emp_id包含将外键插入到地址表中。

+0

你的回答是非常有帮助的,所以在这种情况下,即使多个用户尝试插入记录,它也不会获取错误的员工ID。 – Shiva

+0

是的。驱动程序确保从单个实例的角度来看这是原子。 –