MySQL在生成自动增值时有并发控制吗?

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

我的同事为我提供了一个模拟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;

但是我想知道如果这个代码段大约同时从两个实例执行会怎么样。它们会得到相同的自动增量值吗?在生成新的自动增量值时,MySQL是否具有并发控制,例如关键部分或信号量?

如果您确实需要从DB生成计数器,您可以在这里阅读如何使用InnodDB和锁定读取在MySQL上执行

购买我想知道你是否真的需要一个自动递增字段,或者只是一个你想要存储的对象的uniq标识符;在这种情况下,UUID()可能很好:


是的!如果该列在列定义中具有自动增量,MySQL将在该列上具有自动增量锁。请参阅

是的!如果该列在列定义中具有自动增量,MySQL将在该列上具有自动增量锁。请参考@Praveen:谢谢。也许你应该把你的评论作为答案。答案已经发布在@ScottChuThanks!但由于某些原因,我无法在当前项目中使用UUID()。