使用mysql生成手动int主键的最佳方法是什么?
我不想使用自动增量功能。
我教过创建一个表,其中一列类型为int,名为sequence。因此,每次我要插入新记录时,请先检查此列并使用该值作为主键。然后在插入成功后递增序列的值。
这是一个很好的方法吗?
答案 0 :(得分:6)
创建一个包含一个 InnoDB 类型的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表类型。
答案 1 :(得分:2)
这种方法有效但你需要有一个事务来包装这些不同的原子操作(查找,插入和递增)
但是,您能详细说明为什么自动增量柱不够好吗?它是安全且有保证的数据库功能,所以除非你有令人信服的理由,否则我会坚持下去。
答案 2 :(得分:0)
我认为这是非常合理的,只要给定表中的下一个序列的值是通过函数或过程(它本身更新序列表)来传递以确保唯一性,而不是通过
select max(id) + 1 from ...