cctv网站面试题,寻找删除的3个主键

bonlog 2015-08-16 03:52:26
有一mysql表,其id字段是自增主键,共有3048个记录,但是有人在其中删除了3个记录(变成了3045条记录了)。

问,
怎么找出具体的是哪3个记录被删除了?
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bonlog 2015-08-16
  • 打赏
  • 举报
回复
引用 4 楼 ACMAIN_CHM 的回复:
如果是面试就直接这么答吧。 这个答案并不严密完整。 另外还要考虑 被删除 id连续的情况。 select id-1 from 有一mysql表 t where not exists (select 1 from 有一mysql表 where id=t.id-1) and id>1
不错,极为感谢。成功了。
rick-he 2015-08-16
  • 打赏
  • 举报
回复
1、感觉是考察id自增的连续性,可以使用过程,如3楼 2、要知道详细的记录,可以要求给binglog日志,先恢复在另外的数据库中,然后对比数据
ACMAIN_CHM 2015-08-16
  • 打赏
  • 举报
回复
如果是面试就直接这么答吧。 这个答案并不严密完整。 另外还要考虑 被删除 id连续的情况。 select id-1 from 有一mysql表 t where not exists (select 1 from 有一mysql表 where id=t.id-1) and id>1
wiksys 2015-08-16
  • 打赏
  • 举报
回复
要是觉得程序连接太恶心,那就直接数据库操作。 增加临时列,存储过程循环放里面放值1-3048。 判断是否相等,如果不等,去ID最小的一个。捕获。 然后从此ID开始,往后所有ID+1 然后再次判断,获取到第二个ID,捕获。 再来一次。
wiksys 2015-08-16
  • 打赏
  • 举报
回复
上面回复的有问题。考虑的不对。 直接循环取一次,要是存在就跳过,要是没有,就捕获这个ID。
wiksys 2015-08-16
  • 打赏
  • 举报
回复
添加一个零时字段。 for(i=1;i<=3048;i++){ 获取当前行的ID; if(ID=i) continue; 否则: 捕获; i++ continue; };

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧