代码之家  ›  专栏  ›  技术社区  ›  Enrique

在mysql中手工生成int主键

  •  1
  • Enrique  · 技术社区  · 15 年前

    用MySQL手工生成int主键的最佳方法是什么?

    我不想使用自动增量功能。

    我教创建一个表,其中有一列类型为int,名为sequence。所以每次我要插入一个新记录时,首先检查这个列,并使用这个值作为主键。然后在插入成功之后,递增sequence的值。

    这是一个很好的围裙吗?

    3 回复  |  直到 15 年前
        1
  •  6
  •   Ramon    15 年前

    创建具有一个int列类型的表 诺伊德 :

    CREATE TABLE key_table ( next_value INT NOT NULL DEFAULT 0 ) ENGINE=InnoDB;
    

    然后,当您想要获取密钥的新值时,必须启动一个事务(使用您正在使用的API),然后:

    SELECT next_value FROM key_table FOR UPDATE
    

    然后读取返回的值,它是主键的值。然后增加值 仍在同一事务中 执行:

    UPDATE key_table SET next_value = next_value + 1;
    

    然后提交您的事务。

    这将确保完全一致 当且仅当 您使用如上所述的事务 使用innodb表类型。

        2
  •  2
  •   Learning    15 年前

    这种方法是可行的,但您需要有一个事务来包装这些不同的原子操作(查找、插入和递增)

    但是,您能详细说明一下为什么autoincrement列不够好吗?它是安全和有保证的数据库特性,所以除非您有令人信服的理由,否则我会坚持使用它。

        3
  •  0
  •   davek    15 年前

    我认为这是非常合理的,只要给定表中的下一个序列的值是通过一个函数或过程(它本身更新了序列表)传递的,以确保唯一性,而不是通过

    select max(id) + 1 from ...