面试官:数据库自增 ID 用完了会咋样?( 二 )


文章插图
 
分析:

  • 刚开始设置 row_id 为 1 , 插入三条数据 1、2、3 的 row_id 也理应是 1、2、3;这是没问题的 。
  • 接着设置 row_id 为最大值 , 紧跟着插入三条数据 。这时的数据库结果是:4、5、6、3;你会发现 1、2 被覆盖了 。
  • row_id 达到后最大值后插入的值 4、5、6 的 row_id 分别是 0、1、2;由于 row_id 为 1、2 的值已存在 , 所以后者的值 5、6 会覆盖掉 row_id 为 1、2 的值 。
结论:row_id 达到最大值后会从 0 重新开始算;前面插入的数据就会被后插入的数据覆盖 , 且不会报错 。
04 总结数据库自增主键用完后分两种情况:
  • 有主键 , 报主键冲突
  • 无主键 , InnDB 会自动生成一个全局的 row_id 。它到达最大值后会从 0 开始算 , 遇到 row_id 一样时 , 新数据覆盖旧数据 。所以 , 我们还是尽量给表设置主键 。
为什么我说这是个有意(keng)思(b)问题?
我的回答除了以上解决方法外 , 还提到在业务开发中 , 我们不会等到主键用完那天就已经分库分表了 , 基本不会遇到这种情况 。
这时 , 面试官可能会问你分库分表咋处理 , 如果你不会就不要主动提了 , 点到即止 。
05 参考文章
  • blog.csdn.net/weixin_39640090/article/details/113227742
  • blog.csdn.net/qq_35393693/article/details/100059966
  • time.geekbang.org/column/article/69862
原文链接:
https://mp.weixin.qq.com/s/1gmpJqBmCBsNPlLbrN0Q7Q

【面试官:数据库自增 ID 用完了会咋样?】


推荐阅读