gpt4 book ai didi

java - 当自动提交设置为 false 时,select 是否返回最后插入的行?

转载 作者:行者123 更新时间:2023-11-29 19:05:50 27 4
gpt4 key购买 nike

假设我有一个名为 users 的表和一个名为 username 的列,其格式为 user1 ,用户2 ..

我想循环地将用户插入到该表中,每个条目的值取决于之前的条目。新条目的值由表中按字母顺序排列最大的条目生成,即 users

因为在 AutoCommit 设置为 false 时,插入后可以在 JDBC API 中getGenerateKeys

在如下情况下:

connection.setAutoCommit(false);
while(someCondition)
{
ResultSet rs = connection.createStatement("select max(username) from users").executeQuery();
if(rs.next())
{
name= rs.getString("username"); //returns user1
}
String newName = generateNewName(name); // simply makes user1 -> user2

connection.createStatement("insert into users (name,...) values ("+newName+",...)").executeUpdate(); ///and inserts..
}

select 查询是否返回最后插入的值或者它返回表中之前我开始循环的最大列?

最佳答案

首先,为了确保您立即看到数据库上的所有更改,优先使用 READ_UNCOMMITED 的 TransactionIsolation,而不是使用自动提交。或者,在任何地方使用自动提交也可以完成这项工作。

一旦您确保立即看到每个数据库更改,数据库就会向您发送选择执行期间的某个时间的最大用户数。但是,一旦您实际收到结果,其他线程可能会创建其他用户。因此,这仅适用于单线程工作,并且很可能现在没有任何意义。

TL:DR不,不要这样做!

关于java - 当自动提交设置为 false 时,select 是否返回最后插入的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43520213/

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