前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自增主键,很多人以为自己懂了,然而...

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

作者头像
架构师之路
发布2020-03-23 18:12:10
2960
发布2020-03-23 18:12:10
举报
文章被收录于专栏:架构师之路架构师之路

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

实验一、自增键初始值测验

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(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语句范围加锁?

四个测验,你的答案是什么?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档