【问题标题】:I want to insert employee id in address table(child table)-one to many concept我想在地址表(子表)中插入员工 ID - 一对多概念
【发布时间】:2015-07-10 05:26:03
【问题描述】:

我正在使用Java Jdbc connection

我的问题很简单,我在一个员工表中插入了员工记录 例如:

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

如何获取子表的外键(address)并插入?

如果我使用select max(emp_id) from employee 并将 id 插入子表 我担心如果不止一个人尝试在员工表中插入值,并且有可能我会为子表获取错误的员工 ID。 有没有办法在子表中插入员工ID。

注意:我需要一个关于如何在子表中插入员工 ID 的 sql 查询

【问题讨论】:

  • 子表示例:插入地址(foreignkey_employee_id,door_no,street name);
  • 是的,我只需要自动递增

标签: java mysql sql database


【解决方案1】:

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

更多详情请参考此链接

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

【讨论】:

  • OP 想要 JAVA,而不是 PHP?
  • 这个问题用JAVA 标记,因此OP想要一个JAVA代码而不是PHP函数。 mysql_insert_id() 不是任何 JAVA“函数”(因为 JAVA 中根本没有函数)。手册中的链接示例显示了C 代码 sn-p。
【解决方案2】:

你需要做几件事。

假设,您在employee 中的主键不是 AUTO_INCREMENT,名称为emp_id,并且您插入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 对吗?
  • 是的。驱动程序确保从单个实例的角度来看这是原子的。
猜你喜欢
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多