`

InnoDB AUTO_INCREMENT字段原理

阅读更多

官方文档如下:http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-handling.html

简单记录下:

  1. 在InnoDB中使用AUTO_INCREMENT机制必须要对相应的列建立索引,用于解决查询最大值问题
  2. AUTO_INCREMENT的计数器存放于内存中,而非硬盘
  3. 当表在服务器启动后第一次插入数据时,MySQL会先执行一次“select max(ai_col) from table for update;”用于初始化AUTO_INCREMENT。ai_col指代AUTO_INCREMENT对应的列,该方案能解决第2点未存盘的弊端
  4. 默认步长为1,可以通过配置auto_increment_increment参数配置步长
  5. 如果表空表,则计数器值默认为1。可以通过配置auto_increment_offset参数修改
  6. 如果所在的列,存在比计数器当前计数更大的值,则计数器会更新为当前最大值+步长(默认1)的值
  7. 如果AUTO_CREAMENT对应的列,在插入数据时,值为0或者NULL时,InnoDB会使用计数器中的值替代
  8. AUTO_CREAMENT所在列,不能为负数,同时不能超过Integer的最大值
  9. 使用AUTO_CREMENT时,会锁表。该锁只持续到计数器分配完成值,而不是持续到整条SQL的事务完成
分享到:
评论

相关推荐

    MySQL AUTO_INCREMENT 主键

    - **InnoDB**:InnoDB也是MySQL中常用的存储引擎,同样支持`AUTO_INCREMENT`特性。它提供了事务、行级锁等功能,使得它在需要高并发处理的环境中非常受欢迎。 - **HEAP/BDB**:这两个存储引擎也支持`AUTO_INCREMENT`...

    mysql中自增auto_increment功能的相关设置及问题

    - `auto_increment_increment`:定义了自增字段每次递增的步长,默认值为1,即每次递增1。 - `auto_increment_offset`:设置了自增字段的初始值,默认也为1。这意味着第一条记录的自增ID将是1。 2. **设置自增...

    解析mysql中的auto_increment的问题

    在InnoDB存储引擎中,auto_increment的值被存储在内存中的一个计数器中。每当向表中插入一条新记录时,这个计数器就会被增加。如果在插入操作完成之前发生意外的数据库重启,内存中的计数器可能会丢失,导致ID值的不...

    Mysql auto_increment 重新计数(让id从1开始)

    1. **自增ID的存储类型**:通常,`auto_increment`字段是整数类型(如`INT`或`BIGINT`),根据业务需求选择合适的范围。 2. **自增ID的递增策略**:默认情况下,每次插入新行时,`auto_increment`会递增1,但可以...

    python mysql自增字段AUTO_INCREMENT值的修改方式

    在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值...create table t4(id int auto_increment primary key, num int) engine=innodb default charset=utf8; 那么接下

    高德地图省市区数据表表

    创建表的字段如下,有需要再下载。 CREATE TABLE `region` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '表id', `name` varchar(32) ...) ENGINE=InnoDB AUTO_INCREMENT=12120 DEFAULT CHARSET=gbk;

    2018年5月更新手机号码归属地数据库 38万条

    数据库字段如下 CREATE TABLE `phone` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `pref` varchar(10) DEFAULT NULL COMMENT '手机号前三位'...) ENGINE=InnoDB AUTO_INCREMENT=387892 DEFAULT CHARSET=utf8;

    力求资源全国机场全国机场和所属区划sql

    ) ENGINE=InnoDB AUTO_INCREMENT=243 DE 在踩完所有的收费、免费、关注公众号等手段后,一怒之下,自行整理,其中痛苦,懂得都懂,目前的结构是我当前的需求,分享出来,希望能帮助大家,省去一些数据整理的时间,...

    mysql自增字段重排 mysql删除表后自增字段从1开始.pdf

    在MySQL数据库中,自增字段(AUTO_INCREMENT)是一种常见的特性,用于在插入新记录时自动为该字段生成唯一的序列编号。这个字段通常用于主键,确保每个记录的唯一性。以下是对MySQL自增字段相关知识点的详细说明: ...

    spring security demo

    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `resource` (`resource_id`, `name`, `url`) VALUES (1, 'common_index', '/myPage/myPage.jsp'), (2, 'admin_index', '/admin/admin.jsp'); ...

    PostgreSQL AUTO INCREMENT(自动增长)

    在MySQL中,我们通常使用`AUTO_INCREMENT`关键字来创建自增字段,例如创建一个表runoob_tbl: ```sql CREATE TABLE IF NOT EXISTS `runoob_tbl`( `runoob_id` INT UNSIGNED AUTO_INCREMENT, `runoob_title` ...

    8.MySQL存储引擎--MyISAM与InnoDB区别1

    在InnoDB中,AUTO_INCREMENT可以确保每个插入的行都有一个唯一的ID,而MyISAM则需要手动设置AUTO_INCREMENT的值。 删除数据 InnoDB和MyISAM在删除数据方面也有所不同。在InnoDB中,使用DELETE FROM table可以快速地...

    mysqlDML命令例子

    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; ``` - **字段解析**: - `inter_id`:主键,自动递增的大整型(`bigint`)字段,用于唯一标识每条记录。 - `description`:非空的字符串类型(`...

    mysql自增字段重排 mysql删除表后自增字段从1开始.docx

    要重置自增字段的起始值,可以在创建表时使用`AUTO_INCREMENT=n`选项,或者使用`ALTER TABLE table_name AUTO_INCREMENT=n`命令。例如,如果你想要自增字段从10开始,你可以执行`ALTER TABLE table_name AUTO_...

    1 创建数据库.docx

    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; ``` 这个`t_article`表有三个字段:`id`作为主键,自动递增且不可为空;`title`存储文章标题,允许为空;`content`存储文章内容,使用`longtext`类型可以...

    MySQL8自增主键变化.doc

    对于自增主键的分配规则是由 InnoDB 数据字典内部一个计数器来决定的,而该计数器维护在了内存中,并不会持久化到磁盘中,此时硬盘中并无数据,当数据库重启的时候,该计数器会被初始化为: auto_increment = max...

    JAVAswing带GUI界面的学生信息管理系统(源码+数据库+执行文件).zip

    数据库配置: 1.手动创建数据库“管理系统” ...实际操作过程中发现,直接运行整个代码会出错,所以在创建表时去掉“)”后的ENGINE=InnoDB AUTO_INCREMENT=201181110151 DEFAULT CHARSET=gb2312 ROW_FORMAT=FIXED;字段

    mysql全局变量详解[收集].pdf

    2. **auto_increment_increment**:它定义了自增长字段每次递增的量,默认是1,同样在1到65535之间。在主主复制配置中,这个设置确保了不同服务器上的自增序列不会重叠。 3. **autocommit**:这个变量控制事务的...

    mysql练习10.24

    使用CREATE TABLE语句创建表,例如CREATE TABLE student(sid INT NOT NULL AUTO_INCREMENT,name VARCHAR(20),age INT NOT NULL,PRIMARY KEY(sid),UNIQUE KEY name(name))ENGINE=InnoDB AUTO_INCREMENT=4...

Global site tag (gtag.js) - Google Analytics