mysql的自增主键是否连续

编程

drop table if exists book;

/*==============================================================*/
/* Table: book                                                  */
/*==============================================================*/
create table book
(
   id                   bigint not null auto_increment,
   name                 varchar(32) comment "书名",
   price                numeric(10,3) comment "价格",
   primary key (id),
   unique key idx_name(name)
);

alter table book comment "book";

测试表book  有一个唯一索引 name 书名,依次执行下面的sql

insert into book(name,price)VALUES("雪中悍刀行",52.6)

insert into book(name,price)VALUES("雪中悍刀行",52.6)

insert into book(name,price)VALUES("剑来",52.6)

select *  from book;

结果如下

所以这种唯一主键冲突,会导致id的自增会是不连续的

我们清空表,再验证另外一种场景 

truncate table book;

insert into book(name,price)VALUES("雪中悍刀行",52.6);
begin;
    insert into book(name,price)VALUES("剑来",52.6);
rollback;
这个时候查看表结构入下图

ID 的AUTO_INCREMENT=3 也就是说,下一条插入的数据ID 是3,虽然 第二条数据插入sql 我们回滚了但是自增id的值是没有回滚成2的

执行insert into book(name,price)VALUES("剑来",52.6);

查看表数据,如下图,id=3

上面验证了,在新增数据的时候,新增sql的事务由于某种原因会回滚了,但是表主键值是不会随着事务回滚的,这也是导致表自增主键不连续的另外一种原因

mysql 在执行insert 的时候整体流程入下图所示

mysql 的主键id 自增是不连续的,业务中不能依赖主键的连续去做设计的

mysql inoDB引擎表 的主键id 自增值是保存在内存中的,所以mysql服务重启,自增值会丢失掉的,如果在重启服务之前对表有删除数据的操作,也会导致id 自增不连续的

1.mysql 每次执行是不是都要去获去自增值,批量插入语句的时候,每次获取自增值是不是影响插入效率?

2.我们设计表的时候,都要有自增的主键,这种设计有什么好处还是就是一种规范?

 

以上是 mysql的自增主键是否连续 的全部内容, 来源链接: utcz.com/z/516564.html

回到顶部