《三类插入与自增键的关系》一文,基本解答了《自增键四道测验题》,仍有水友要求贴答案,原理都解释了,copy语句执行下,真的难么?画外音:你们赢了,我还是贴一下执行结果。实验一、自增键初始值测验

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,2B 1,2,3C 以上都不对

答案:B

自增键从1开始,该测验对应《三类插入与自增键的关系》中的简单插入(simple insert)。简单插入,能够提前知道被插入的行数,在处理自增键时,是最容易的。


实验二、批量插入测验

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 以上都不对

答案:A

插入成功,该测验对应《三类插入与自增键的关系》中的批量插入(bulk insert)。批量插入,不能提前知道被插入的行数,在处理自增键时,每插入一行,才会赋值新的自增值,在批量插入事务并发时,“可能”出现同一个事务的自增键不连续。

画外音:可以有优化机制,未来撰文。


实验三、混合插入测验
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,222B 1,111,112,222,223C 插入失败,自增键报错D 以上都不对

答案:B

插入成功,自增键每次从最大值后面开始新增,该测验对应《三类插入与自增键的关系》中的混合插入(mixed-mode insert)。有些行插入时指定了自增键,无需数据库生成;有些行插入时未指定自增键(NULL),需要数据库生成。

实验四、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,225B 1,111,112,222,223,224,225,226C 1,111,112,222,223,224,225D 1,111,112,222,223,225,226E 以上都不对

答案:D

该测验也对应《三类插入与自增键的关系》中的混合插入(mixed-mode insert)。有些行插入实际上是修改,无需数据库生成自增键;有些行插入实际上就是插入,需要数据库生成自增键。

insert … on duplicate key update … 这种情况是最最复杂的,它可能导致,系统生成的自增值,在更新阶段用不上。画外音,官网原文是:

an INSERT followed by a UPDATE, where the allocated value for the AUTO_INCREMENT column may or may not be used during the update phase.

伸手党们,这下满足了吧?都答对了么。画外音:MySQL版本为MySQL5.6。知其然,知其所以然。架构师之路-分享技术思路

相关文章

《缓冲池(buffer pool),这次彻底懂了!》

《写缓冲(change buffer),这次彻底懂了!》

作业题:insert into t1(name)values("zhangsan"),("lisi"),("wangwu");这类简单插入,当有并发事务执行时,自增键仍能保证连续性,是如何做到的?A:行粒度加锁,实施互斥B:表粒度加锁,实施互斥C:全局自增键单例,实施互斥D:SQL语句粒度加锁,实施互斥E:事务粒度加锁,实施互斥

报错 插入更新_自增主键,三类插入测验答案,在这里。相关推荐

  1. 最新Mybatis插入数据返回自增主键详细配置

    Mybatis插入数据返回自增主键 Mybatis插入数据以后只会返回影响的数据库行数,如果是插入一条数据成功则返回1,失败返回零,插入多条返回插入成功的数量. 通过注解或者xml配置无法直接返回自增 ...

  2. mysql自增主键到头了怎么办_自增主键用完了怎么办

    在面试中,大家应该经历过如下场景 面试官:"用过mysql吧,你们是用自增主键还是UUID?" 你:"用的是自增主键" 面试官:"为什么是自增主键?& ...

  3. bigint如何自增_自增主键用完了该怎么办

    引言 在面试中,大家应该经历过如下场景面试官:"用过mysql吧,你们是用自增主键还是UUID?" 你:"用的是自增主键" 面试官:"为什么是自增主键 ...

  4. oracle批量插入并且返回自增主键_mybatis + (oracle)实现主键自增 + 插入数据并返回主键...

    一.实现主键自增 在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键. 要实现自增需要修改 ID列 ...

  5. 关于Mybatis的insert方法返回值(将返回值受影响条数改为插入后的自增主键id)

    今天做ssm项目的时候有一个这样的需求--我借阅一本书然后生成一条借阅记录(借阅记录的主键是递增的"borrowNum"),然后将这条记录的主键返回,在往上查阅资料后知道,只要在对 ...

  6. sql插入语句返回自增主键

    在操作数据库中,插入一条记录,表中的主键是自增的,如果我们需要获得这个主键,就需要在插入的时候,返回这条主键,写法如下: INSERT INTO `gusers_xxxx_log`(`user_id` ...

  7. oracle批量插入并且返回自增主键_oracle 自增主键实现批量更新和增加sql

    增加: 方案1 INSERT INTO WF_TASKTEMP_DEALSTAFF (DEAL_ID, TEMP_ID, STAFF_ID,DEAL_TYPE, STATUS) SELECT WF_T ...

  8. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  9. mysql linux导入csv主键,MySQL导入csv文件内容到Table及数据库的自增主键设置

    写在前面 目的是测试将csv文件内容导入到表中, 同时记录一下自增主键的设置. 测试采用MySQL8.0. 新建表customer_info如下, 未设置主键. 修改上表, 添加主键id, 并设置为自 ...

最新文章

  1. 03_NoSQL数据库之Redis数据库:list类型
  2. python代码大全p-21行Python代码实现拼写检查器
  3. Python3 嵌套函数
  4. java junit4_JUnit4使用Java5中的单元测试
  5. intro to JNDI
  6. 谷歌guava_Google Guava BiMaps
  7. 解析|不懂销售数据分析,就是一笔糊涂账!
  8. codeblocks16.01 中配置Opencv3 姿势
  9. C++ byte数组/char数组 转 int16 int32
  10. 查看最大的10个文件
  11. c语言经典面试题 洗牌,网易游戏面试题:如何设计一个公平的洗牌算法
  12. 10 Java 常见的加密方式
  13. windows下载安装adb(极其简单)
  14. AI头发笔刷_5G大量PS笔刷AI笔刷打包下载(超过1000款笔刷)
  15. 手动设置ip 访问内网地址
  16. python爬楼梯问题_python解决上楼梯问题
  17. superview透明问题
  18. 室内设计师面试技巧有哪些?
  19. 应用跳转(打电话/短信/邮件/浏览器/其他应用)
  20. 201621123028《Java程序设计》第二周学习总结

热门文章

  1. Java数组与List 相互转换方法详解
  2. navc mysql函数备份_入门MySQL——备份与恢复
  3. java 中IO流的概念
  4. Python 函数参数传递
  5. while(1); 作用
  6. 3.5 《数据库系统概论》之基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(定义、查询、更新)
  7. Linux C : GDB调试命令汇总
  8. win10任务管理器快捷键_你都知道吗?Win10任务管理器到底藏了多少秘密
  9. php 插入数据 不成功,thinkphp5连接oracle用insert插入数据失败
  10. python oracle 运维,mysql oracle python连接