我的同事给我提供了一个模拟Oracle序列的代码段:
// 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;
但我想知道如果这个代码段大约同时从 2 个实例执行会怎样。他们会得到相同的生成的自动增量值吗? MySQL 是否有并发控制,例如生成新的自增值时使用临界区还是信号量?
最佳答案
是的!如果该列在列定义中具有AUTO_INCRMENT,则MySQL将在该列上设置自动增量锁。请引用 https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html
关于mysql - MySQL是否有并发控制生成自增值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45628113/