gpt4 book ai didi

MySQL 使用 INSERT IGNORE INTO 时如何检索 LAST_INSERT_ID 的 ID?

转载 作者:可可西里 更新时间:2023-11-01 06:30:24 28 4
gpt4 key购买 nike

场景:

  1. 我正在将一个 CSV 文件插入到我的数据库中。
  2. 我正在使用 jdbc 驱动程序遍历文件并执行我的插入操作
  3. name 列是唯一的,因此当相同的值到达时插入不会更改表
  4. 我正在使用 INSERT INTO IGNORE 来防止事件发生时迭代中断
  5. 我正在使用 LAST_INSERT_ID() 在下一个插入表中添加为 FK
  6. INSERT_IGNORE 发生时我得到 0

我该如何解决这个问题?

 Connection con = null;

try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
con.setAutoCommit(false);

Statement s1 = (Statement) con.createStatement();
s1.executeUpdate("INSERT IGNORE INTO ORIGIN (ORI_NAME) VALUES(\""
+ d.getOriginName() + "\")");

Statement s2 = (Statement) con.createStatement();
s2.executeUpdate("INSERT IGNORE INTO STOCK (ORI_ID,S_TITLE) VALUES ("
+ "(SELECT ORI_ID FROM ORIGIN WHERE ORI_ID =LAST_INSERT_ID()),\""
+ d.getStockTitle() + "\")");

}

con.commit();

}
catch (Exception e)
{
if (con != null)
try
{
con.rollback();
}
catch (SQLException e1)
{
e1.printStackTrace();
}

e.printStackTrace();
}
finally
{
if (con != null)
try
{
con.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}

要插入数据库的 CSV 文件示例

US, P1, M, 200, 344
US, P1, L, 233, 344
US, P2, M, 444, 556
MX, Q4, L, 656, 777

表:http://sqlfiddle.com/#!2/b5752

最佳答案

您熟悉 MySQL 的 ON DUPLICATE KEY UPDATE 语法吗?

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

 // Results are the same as doing an update.
// Note the way the PK can be used to avoid an IGNORE.
s1.executeUpdate("INSERT INTO ORIGIN (ORI_NAME) VALUES(\""
+ d.getOriginName() + "\" ON DUPLICATE KEY UPDATE ORI_ID=ORI_ID)");

此处的一个实际示例涉及维护站点的失败电子邮件地址:

http://blog.developpez.com/james-poulson/p10016/sql/ne-rien-modifier-en-cas-de-duplicate-key/

关于检索最后插入的 ID,以下是从上面的 mysql.com 链接中获取的:

Suppose that id is the AUTO_INCREMENT column. To make LAST_INSERT_ID() meaningful for updates, insert rows as follows:

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;

关于MySQL 使用 INSERT IGNORE INTO 时如何检索 LAST_INSERT_ID 的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9943368/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com