MySQL在生成自动增值时有并发控制吗?
我的同事为我提供了一个模拟Oracle序列的代码段:MySQL在生成自动增值时有并发控制吗?,mysql,concurrency,auto-increment,identity,Mysql,Concurrency,Auto Increment,Identity,我的同事为我提供了一个模拟Oracle序列的代码段: // generate ticket pstmt = conn.prepareStatement( "insert seq_pkgid values (NULL);" ); if(pstmt.executeUpdate() > 1) { success = 1; } else { throw new Exception("Generating seq_pkgid seque
// generate ticket
pstmt = conn.prepareStatement( "insert seq_pkgid values (NULL);" );
if(pstmt.executeUpdate() > 1) {
success = 1;
} else {
throw new Exception("Generating seq_pkgid sequence failed!");
}
pstmt.close();
pstmt = null;
// get ticket
pstmt = conn.prepareStatement( "select last_insert_id() as maxid" );
rs = pstmt.executeQuery();
if( rs.next() ) {
nSeq = rs.getInt( "maxid" );
}
rs.close();
rs = null;
pstmt.close();
pstmt = null;
但是我想知道如果这个代码段大约同时从两个实例执行会怎么样。它们会得到相同的自动增量值吗?在生成新的自动增量值时,MySQL是否具有并发控制,例如关键部分或信号量?如果您确实需要从DB生成计数器,您可以在这里阅读如何使用InnodDB和锁定读取在MySQL上执行 购买我想知道你是否真的需要一个自动递增字段,或者只是一个你想要存储的对象的uniq标识符;在这种情况下,UUID()可能很好:
是的!如果该列在列定义中具有自动增量,MySQL将在该列上具有自动增量锁。请参阅
是的!如果该列在列定义中具有自动增量,MySQL将在该列上具有自动增量锁。请参考@Praveen:谢谢。也许你应该把你的评论作为答案。答案已经发布在@ScottChuThanks!但由于某些原因,我无法在当前项目中使用UUID()。