自增主键,很多人以为自己懂了,然而...

简介: 关于InnoDB下,自增键机制的四个实验。

InnoDB下,自增键的机制,真的搞透彻了吗?可以尝试回答一下以下四个问题。 实验一、自增键初始值测验

drop table t1;
create table t1(
    id in
t not null auto_increment,
    name varchar(10) unique,
    count int default 0,
    primary key(id),
    index(name)
)engine=innodb;

insert into t1(name) values("zhangsan"),("lisi"),("wangwu");
select from t1;

  请问,被插入的三条记录,id分别为: A 0,1,2 B 1,2,3 C 以上都不对
画外音:初始值,是0还是1?   实验二、批量插入测验

drop table t1,t2;
create table t1(
    id int not null
auto_increment,
    name varchar(10) unique,
    count int default 0,
    primary key(id),
    index(name)
)engine=innodb;

create table t2(
    name varchar(10) unique
)engine=innodb;

insert into t2(name) values("x"),("y"),("z");

insert into t1(name) select name from t2;
select
from t1;

  请问,上述insert...select...的执行结果是: A 插入成功 B 插入失败,自增键报错 C 以上都不对 画外音:insert ... select ...这种批量插入,对于自增键是否有影响呢?   实验三、混合插入测验 drop table t1;
create table t1(
    id int not null
auto_increment ,
    name varchar(10)
unique ,
    count int default 0,
    primary key(id),
    index(name)
)engine=innodb;

insert into t1(id, name) values(
1 , " shenjian ");

insert into t1(id, name) values (
111 , "111"),( NULL , "abc"),( 222 , "222"),( NULL ,"xyz");
select from t1;
  请问,最后一个insert语句,执行结束后id分别是: A 1,2,3,111,222 B 1,111,112,222,223 C 插入失败,自增键报错 D 以上都不对   实验四、insert ... on duplicate key测验 接着实验三 ,继续执行以下语句:

insert into t1(name)values("shenjian"),("aaa"),("bbb")

on duplicate key update count=100;

select from t1;

  请问,最后一个insert语句,执行结束后id分别是: A 1,2,3,111,222,223,224,225 B 1,111,112,222,223,224,225,226 C 1,111,112,222,223,224,225 D 1,111,112,222,223,225,226 E 以上都不对   很多时候,我们只是以为自己懂了。 画外音:做实验之前,版本先拉平到MySQL5.6。   更复杂的问题是:InnoDB在并发插入情况下,自增键的锁机制是怎样的? 画外音:
(1)行锁还是表锁?
(2)事务范围加锁还是SQl语句范围加锁?

本文转自“架构师之路”公众号,58沈剑提供。

目录
相关文章
|
1月前
主键自增
主键自增。
18 4
|
8月前
|
存储 数据库 索引
【面试官挖坑】聚集索引会隐式的自动为表添加一个主键索引那你是不是就可以不设置主键索引了?
【面试官挖坑】聚集索引会隐式的自动为表添加一个主键索引那你是不是就可以不设置主键索引了?
|
10月前
|
算法 NoSQL 关系型数据库
数据库主键一定要自增吗?有哪些场景不建议自增?
数据库主键一定要自增吗?有哪些场景不建议自增?
305 0
|
11月前
|
存储 关系型数据库 MySQL
主键与外键
主键与外键
259 0
|
11月前
为什么要设置主键?
为什么要设置主键?
45 0
|
11月前
|
存储 关系型数据库 MySQL
InnoDB为什么使用自增id作为主键
InnoDB是MySQL数据库中一种常用的存储引擎,它使用自增id作为主键的设计是出于多方面的考虑。
308 0
|
关系型数据库 数据库 索引
主键和唯一索引的区别
主键和唯一索引的区别
134 0
|
SQL 关系型数据库 MySQL
列的完整性约束——主键约束
列的完整性约束——主键约束
|
存储 SQL 关系型数据库
【InnoDB的主键自增长实现原理】
【InnoDB的主键自增长实现原理】
119 0
|
存储 SQL 数据可视化
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
482 2
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏

热门文章

最新文章