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