我加入了一个项目,该项目使用客户端生成的随机数作为mysql数据库中的主键字段。这些主键字段是自动递增的,但尚未使用。
我认为这样做是因为开发人员在插入后不知道如何检索数据库生成的id。
我们现在在许多表中都有一个稀疏的id值数组,并且在插入时会产生大量的键碰撞。
我是否可以做一些补救工作来允许数据库生成id(即从最后分配的id开始并找到下一个可用的id)以及以下JDBC调用是否可以工作?
numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
答案 0 :(得分:0)
我认为如果您在Google上搜索“从序列MySQL生成数据库主键”,它会有所帮助。
使用序列:查找给定表中最大的主键,并创建一个从该最大主键值开始递增1的序列。为每个表创建单独的序列。请注意,您要让数据库生成密钥,因此您必须禁用程序或客户端生成密钥。
或者,您可以创建一个全新的数据库模式,以正确实现主键生成。然后将数据从旧数据库迁移到新数据库,在子表之前填充父表。然后,基于旧的priamry键以编程方式匹配父记录到子记录。但是,我认为这对于数据库的大小来说非常耗时。