我加入了一个项目,该项目使用客户端生成的随机数作为 mysql 数据库中的主键字段。这些主键字段是自增的,但并没有这样使用。
我认为这样做是因为开发人员不知道如何在插入后检索数据库生成的id。
现在,我们在许多表中都有一个稀疏的 id 值数组,并且在插入时存在大量的键冲突。
我可以做一些补救工作来允许数据库生成 id(即从最后分配的 id 开始并找到下一个可用 id)并让以下 JDBC 调用正常工作吗?
numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
最佳答案
我认为,如果您在 Google 中搜索“从 MySQL 序列生成数据库主键”,将会有所帮助。
使用序列:查找给定表中最大的主键,并创建一个从最大主键值开始递增 1 的序列。为每个表创建一个单独的序列。请注意,您让数据库生成 key ,因此您必须禁用程序或客户端生成 key 。
或者,您可以创建一个全新的数据库架构来正确实现主键生成。然后将数据从旧数据库迁移到新数据库,先填充父表,再填充子表。然后,根据旧的主键以编程方式将父记录与子记录进行匹配。但是,我认为对于您的数据库大小而言,这将非常耗时。
关于java - Mysql自定义自增id修复随机id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994846/