Mysql数据库主键自增长删除后id问题?

背景

一个自动抽题的小demo,其中mysql中设置id为主键自增长,但是整个程序有删除逻辑

需求

现在有一个需求是实现自动抽题

思路

原本后端的思路如下:

  1. 查询题目个数
  2. 通过random类实现生成在题目个数范围内随机的Randomid
  3. 查询id从而得到相应题目
    但是由于整个demo中有删除的功能,在删除后会出现数据库的id与题目个数不一致

请问有什么解决方案吗,或者其他的方案

阅读 4k
5 个回答

你的问题是在你删了题目之后,题目的数量和ID不匹配了,你直接查所有题目,然后在随机选择题目就行了

SELECT * FROM questions;

limit offset

randomid是21则:

SELECT
    *
FROM
    questions
ORDER BY
    somefield
LIMIT 1 OFFSET 20;

先查询出题目的数量n,再生成一个小于n的随机数,假设是m
再查询第m条记录 select * from question limit m,1

id=randomId 改为 id >= randomId limit 1

通过一个list就可以解决
List<Integer> ids = 查询库里所有题目的主键;
获取长度
int len = ids.size();
然后在指定长度中随机数,通过ids.get(随机数)获取抽中题目的id就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏