我想在地址表(子表)插入员工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查询
如果将记录插入包含AUTO_INCREMENT列一个表,你可以获取通过调用存储在该列中的值mysql_insert_id()函数。
更多细节参考此链接
https://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
OP想拥有JAVA,而不是PHP? –
问题应该是标签mysql .. –
这个问题被标记为'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
包含将外键插入到地址表中。
你的回答是非常有帮助的,所以在这种情况下,即使多个用户尝试插入记录,它也不会获取错误的员工ID。 – Shiva
是的。驱动程序确保从单个实例的角度来看这是原子。 –
子表示例:插入地址(foreignkey_employee_id,door_no,街道名称); – Shiva
是的,我只需要自动增量 – Shiva