MySQL-自增主键
AUTO_INCREMENT
自增主键可以让主键仅可能的保持递增顺序插入,让索引更紧凑,但是可能会暴露业务数据,黑客可以根据一个id推断其它id,分布式场景可能存在抢主键问题。
自增主键保存在哪里?
MyISAM引擎自增主键保存在数据文件中,即使重启也不会丢失。
InnoDB在8.0以前保存在内存里,每次重启需要寻找数据库的最大主键值。
8.0之后保存在redo日志里。
自增主键一定连续吗?
不一定。
- 唯一约束或外键约束冲突导致事务回滚。
- 无法计算一次性会插入多少数据时
- 修改了auto_increment_increment变量;
自增主键申请策略
对于不确定一次性会插入多少条数据时,会采取指数分配策略。
第一次申请1个,不够用申请两个,再不够用申请4个,再不够用申请8个,依次类推。
自增主键用完了怎么办
用完了会报错,不再递增,最多2^31 -1 。
修改自增属性
auto_increment_increment 和auto_increment_offset两个变量。