mysql - MySQL是否有并发控制生成自增值?

标签 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 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/

相关文章:

mysql - 如何在插入记录之前保留id

mysql - 容器在HOST网络中运行时如何配置marathon-lb?

c++ - 在多线程单写入器多读取器代码中安全使用 int

java - 使用两个线程一次打印一个字母和数字

java - java中如何在一个线程完成时结束其他线程的处理

MySQL 自动增量=535

mysql - 使用其他列中的值更新列

mysql - 无法运行 Hive 子查询

mysql - 对用于报告的 Wordpress/Woocommerce 自定义 SQL 查询进行故障排除

MySql auto_increment 值不正确