033、TiDB特性_AUTO_INCREMENT

自增列

    • 实现原理
    • 使用限制
    • 相关参数
    • 示例

实现原理

  • 每一个自增列使用一个全局可见的键值对用于记录当前已分配的最大ID
  • 为了降低分布式系统分配自增ID的网络开销,每个TiDB节点会缓存一个不重复的ID段
  • 当前预分配的ID段使用完毕,或重启,都会重新再次申请新的ID段

在这里插入图片描述

使用限制

  • 必须定义在主键或唯一索引的列上
  • 只能定义在整数、FLOAT或DOUBLE列上
  • 不支持与列的默认值同时指定在同一列上
  • 不支持使用 alter table 来添加auto_increment 属性
  • 需要通过session变量@@tidb_allow_remove_auto_inc控制是否允许通过alter table来移除auto_increment属性,默认不允许

在这里插入图片描述

auto_increment 属性

  • auto_increment: 用于自动填充默认字段值的属性
    • 处于性能考虑,auto_increment 编号会以批量的形式分配给每个TiDB 实例
    • 缓存批处理的大小可以通过auto_id_cache表选项控制
    • last_insert_id() 可以获得上次插入操作时使用的值

相关参数

AUTO_INCREMENT: 是⽤于⾃动填充默认字段值的属性

  • 出于性能考虑,AUTO_INCREMENT 编号会以批量的形式分配给每个 TiDB Server 实例
  • 缓存批处理⼤⼩可以通过 AUTO_ID_CACHE 表选项控制
  • LAST_INSERT_ID() 可以获得上次插⼊操作时使⽤的值
  • auto_increment_increment 每次增长多少,步长
  • auto_increment_offset 初始的数值是多少。
  • tidb_allow_remove_auto_inc 允许删除 列上的auto increment属性。默认是不允许。
tidb> show variables like 'auto_increment_%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |  # 每次增长多少,步长
| auto_increment_offset | 1 | # 初始的数值是多少。
+--------------------------+-------+
# tidb_allow_remove_auto_inc  允许删除 列上的auto increment属性。默认是不允许。tidb> show variables like 'tidb_allow_remove_auto_inc';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| tidb_allow_remove_auto_inc | OFF |
+----------------------------+-------+
1 row in set (0.01 sec)

示例

  1. 创建table
DROP TABLE IF EXISTS test.t1;
CREATE TABLE test.t1 (id int PRIMARY KEY AUTO_INCREMENT,from_port char(4));DROP TABLE IF EXISTS test.t2;
CREATE TABLE test.t2 (id int PRIMARY KEY AUTO_INCREMENT,from_port char(4))AUTO_ID_CACHE 300;  # 从300的基础上 开始增长 TiDB server 1 0-300 TiDB Server 2 301-600 
  1. 执行插入
/* Populate */
INSERT INTO test.t1 (from_port) VALUES ('4000'), ('4000'),
('4000');  
# id : 1,2,3/* Check value */
select id, from_port from test.t1;
/* Explictly assign value "7" to auto_increment column */
insert into test.t1 values (7, '4000');
# id: 1,2,3,7/* Check value */
select id, from_port from test.t1;
/* Relying on auto_increment values to assign values to new rows
*/
insert into test.t1 (from_port) values ('4000');
insert into test.t1 (from_port) values ('4000');
/* Check value */
select id, from_port from test.t1;# id: 1,2,3,7,8,9
注意:如果实在4000端口上执行,则结果是
# id: 1,2,3,457
  1. 验证不同TiDB的缓存批处理大小
/* 在4000端⼝的tidb上插⼊数据 */
insert into test.t2 (from_port) values ('4000');
insert into test.t2 (from_port) values ('4000');# id: 1,2
/* 在4001端⼝的tidb上插⼊数据 */
insert into test.t2 (from_port) values ('4001');
insert into test.t2 (from_port) values ('4001');
/* 查询t2中的数据 */
select * from test.t2# id: 1,2,301,302
  1. 验证不同TiDB中插⼊相同的id
/* 在4000端⼝的tidb上插⼊数据 */
insert into test.t2 (id,from_port) values (90000,'4000');
/* 在4001端⼝的tidb上插⼊数据 */
insert into test.t2 (id,from_port) values (90000,'4001');

注意:这个会报错,提示插入的是重复值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19001.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用楔形步进体模进行X射线骨密度测定

来源:投稿 作者:洪棋 编辑:学姐 骨密度(BMD)被广泛应用于骨折风险的预测和骨质疏松症的常规识别。双能x线骨密度仪(DXA)在临床上广泛用于测量脊柱、髋关节和前臂的骨密度(aBMD)。放射学骨密度测定法(Radiographic absorpometry, RA)是最早的骨…

微信小程序开发学习之页面导航(声明式导航和编程式导航)

微信小程序之页面导航(声明式导航和编程式导航) 1.0 页面导航1.1. 声明式导航1.1.1. 导航到tabBar页面1.1.2. 导航到非tabBar页面1.1.3. 后退导航 1.2. 编程式导航1.2.1. 导航到tabBar页面1.2.2. 导航到非tabBar页面1.2.3. 后退导航 1.3. 导航传参1.3.1.…

ELK之logstash四大组件

ELK之logstash四大组件 一、grok(正则捕获插件) 1.内置正则调用 //内置正则表达式调用 %{SYNTAX:SEMANTIC}●SYNTAX代表匹配值的类型,例如,0.11可以NUMBER类型所匹配,10.222.22.25可以使用IP匹配。●SEMANTIC表示存储该值的一个变量声明&a…

软件设计模式与体系结构-设计模式-行为型软件设计模式-访问者模式

目录 二、访问者模式概念代码类图实例一:名牌运动鞋专卖店销售软件实例二:计算机部件销售软优缺点适用场合课程作业 二、访问者模式 概念 对于系统中的某些对象,它们存储在同一个集合中,具有不同的类型对于该集合中的对象&#…

Kafka request.log中RequestQueueTimeMs、LocalTimeMs、RemoteTimeMs、ThrottleTimeMs、含义

Kafka request.log中RequestQueueTimeMs、LocalTimeMs、RemoteTimeMs、ThrottleTimeMs、含义 要理解各个延时项的含义,必须从Kafka收到TCP请求、处理请求到返回TCP包整个流程开始梳理 RequestQueueTimeMs Processor 执行processNewResponses() 方法,不…

Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling

感想:由于看不懂官方代码的原因,自己这方面耽误了一段时间,一方面,在AI与经济学之间犹豫了许久,另一方面,工作 了半年,也没发工资,没空找培训代码的课程,所以停止更新了三…

wx.getUserProfile too frequently 问题

接口调用频率规范 概念介绍 小程序wx接口可分为“普通接口”和“限频接口”。 “限频接口”指的是一个用户在一段时间内不允许频繁调用的wx接口,此类接口一般会调用到微信后台系统资源,为了保护系统,同时防止用户资源被滥用,开…

软件测试基础概念

什么是需求 什么是需求?简单来说就是我想吃饭,这件事就是我的需求,我不想上课,这也是我的需求。对于软件测试来说,需求可以分为用户需求和软件需求。 用户需求 用户需求简单可以理解为甲方提出的要求,如…

git基础教程(linux)

1.git简介 git 分布式版本控制 git两大特点: 版本控制:支持多人同时开发 分布式: 2.安装与配置 安装 sudo apt-get install git安装成功,运行如下命令: git3.创建一个版本库 (1)新建一个目录git_test&#xff0c…

zabbix服务部署

文章目录 zabbix1 zabbix简介1.1 组成部件1.2 监控原理1.3 Zabbix 6.0新特性1.4 Zabbix6.0功能组件1.4.1 Zabbix Server1.4.2 数据库1.4.3 Web界面1.4.4 Zabbix Agent1.4.5 Zabbix Proxy1.4.6 Java Gateway 2 部署zabbix服务端2.1 部署Nginx2.2 安装PHP2.3 修改Nginx配置2.4 修…

找工作不用愁!送你一份Salesforce顾问面试秘籍(下)(含答案)

作为SaaS行业的先驱,Salesforce的发展一路高歌猛进。在Salesforce生态系统中不仅能学习到最新的技术,而且比其他行业的同岗位享有更高的薪水,这也驱使了越来越多人加入Salesforce大军。 在之前的文章中,自由侠部落为学习者梳理了…

奥威BI-金蝶云星空SaaS版一站式平台:对接数据、做分析

金蝶云星空和BI大数据分析平台都在企业数字化转型中扮演了重要的角色,为企业提供了全面的数字化解决方案和数据分析功能,两者强强联合不仅能提高部署效率,更能增强数据分析、数据可视化效果,帮助企业更好地适应市场变化和用户需求…