展开

关键词

MySQL auto_increment问题

auto_increment 问题: https://yq.aliyun.com/articles/59263? 5176.8091938.0.0.bjzoFN https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html 导致auto_increment 参考: http://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html 1、 alter table xx auto_increment 插入3条记录后,auto_increment=4. 然后再删除掉这三条记录,这时候的auto_increment=4 没变 但是如果我们关闭MySQL,当MySQL再次起来的时候,会发现auto_increment值从4,变成1 【第三种情况,在mysql8.0

55220

Mysql(7)——auto_increment简介

自增长,也就是auto_increment是数据库中的一个比较特殊的定义,当相应列的值给值为NULL或者不给值的时候,会触发auto_increment,对当前已经存在的字段的数字进行+1或+你给的特定值的操作 ,如我上面的例子,auto_increment一般跟主键搭配操作,比较合适。

22220
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL重新设置auto_increment

    处于某种目的,如果希望该自增字段值一定是连续的,有2种解决办法: 1.表记录不允许物理删除 2.物理删除表记录后重新设置auto_increment 在此,专门针对重新设置auto_increment 更新auto_increment值 在修改表的auto_increment值之前需要先查看当前值是多少: mysql> select auto_increment from information_schema.tables where table_schema='数据库名' and table_name='表名'; +----------------+ | auto_increment | +-------------- 如果此时我们将表中的最后10000条数据物理删除掉,那么再插入新的记录时,auto_increment值将会继续增加:60003,60004 ... 。 为了使得新添加的记录自增ID再次继续从50003开始计数,执行如下语句: mysql> alter table 表名 AUTO_INCREMENT=50002; 最后总结 直接修改auto_increment

    11320

    重新整理AUTO_INCREMENT字段

    重新整理AUTO_INCREMENT字段 AUTO_INCREMENT 并非按照我们意愿,顺序排列,经常会跳过一些数字,例如当插入失败的时候,再次插入会使用新的值。 有时会造成浪费,我们可以使用下面SQL重新编排AUTO_INCREMENT序列。 select max(id) from mytable; ALTER TABLE mytable AUTO_INCREMENT = 1000; 注意外键,需要 ON UPDATE CASCADE 支持 =43642; CREATE TABLE `group` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT =8; CREATE TABLE `group_has_contact` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `group_id` INT

    38160

    重新整理AUTO_INCREMENT字段

    重新整理AUTO_INCREMENT字段 AUTO_INCREMENT 并非按照我们意愿,顺序排列,经常会跳过一些数字,例如当插入失败的时候,再次插入会使用新的值。 有时会造成浪费,我们可以使用下面SQL重新编排AUTO_INCREMENT序列。 select max(id) from mytable; ALTER TABLE mytable AUTO_INCREMENT = 1000; 注意外键,需要 ON UPDATE CASCADE 支持 =43642; CREATE TABLE `group` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT =8; CREATE TABLE `group_has_contact` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `group_id` INT

    51750

    MariaDB 的自增字段 AUTO_INCREMENT 字段

    简单来说就是一个数据表中需要一个主键,但是这个主键可能又没有什么具体的意义,你可以使用 AUTO_INCREMENT 来标识这条记录。 通过给字段添加 AUTO_INCREMENT 属性来实现主键自增长。 语法格式如下: AUTO_INCREMENT 说明 有下面的一些属性需要进行说明: 默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。 AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。 AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。 AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。

    14750

    保存mysql InnoDB的auto_increment值另类方案

    问题描述 mysql数据库有auto_increment这样一个特性,一般是用来设置Integer类型主键自增长。 比如下面的代码: -- 刚创建表,该表没有AUTO_INCREMENT值 create table test( id int(11) primary key not null auto_increment mysql的上述行为说明在mysql运行过程中InnoDB存储引擎的表,其AUTO_INCREMENT值会随着插入操作持续增长的,但mysql重启之后,AUTO_INCREMENT值并没有持久保存下来, 重启后再插入数据,mysql会以表中最大的id+1作为当前的AUTO_INCREMENT值,新插入的数据的ID就变为这个了。 值保存下来 利用插入后的触发器,在每次插入数据后更新保存的auto_increment值 利用init-file参数,在mysql服务启动时调用一个存储过程,该存储过程负责以保存的auto_increment

    42250

    数据插入失败引发的主键auto_increment问题

    那么,问题就定位到主键的auto_increment属性上了。 问题重现 下面来还原问题,以便能准确查找出原因。 表结构如下: CREATE TABLE `test_innodb` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', `username 问题原因 在mysql官网的文档中,对“AUTO_INCREMENT Handling in InnoDB”,有这样一段说明: InnoDB uses the in-memory auto-increment 大概意思是,Innodb存储引擎的auto_increment计数器是随着mysql-server启动分配,并永久缓存在内存中。 当插入数据失败或者回滚事务时,内存中的auto_increment计算器的值却不会回滚。 举一反三 Innodb存储引擎会引起此问题,那MyISAM存储引擎呢?

    1.3K30

    auto_increment 自增键的一些说明

    auto_increment 问题: 原文: https://yq.aliyun.com/articles/59263? 变小的几种情况: 1、 alter table xx auto_increment = yy; 2、 truncate table 3、 restart mysql 第三种的复现方法: 一张刚创建的 插入3条记录后,auto_increment=4. 然后再删除掉这三条记录,auto_increment=4 没变 重启MySQL,会发现auto_increment值被清空了。 how InnoDB initializes AUTO_INCREMENT counters. If you specify an AUTO_INCREMENT column for an InnoDB table, the table handle in the InnoDB data dictionary

    29710

    MySQL中的字段约束 null、not null、default、auto_increment

    今天我们来看一下MySQL的字段约束:NULL和NOT NULL修饰符、DEFAULT修饰符,AUTO_INCREMENT修饰符。 NOT NULL DEFAULT '' 不能为null 默认为 '' NULL DEFAULT NULL 可以为null 默认为null AUTO_INCREMENT 修饰符: AUTO_INCREMENT

    1.7K20

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

    这个时候我们就要学习去修改数据表的一些属性值了,而这个属性值就是AUTO_INCREMENT。 首先我们要知道怎么查看这个属性的值。 utf8; 那么接下来我可以通过命令来查看AUTO_INCREMENT的值: ? 通过命令我们好像没找到这个AUTO_INCREMENT属性啊,why?这是因为我们刚建好表,还没有数据,所以这个属性还没开始被赋值。 此时我们可以找到AUTO_INCREMENT这个属性,并且它的值等于4,这个是不是就是说明AUTO_INCREMENT记录的值表示对于下一条记录的id值。 通过alter table t4 AUTO_INCREMENT=2;这个命令我们可以修改AUTO_INCREMENT属性的值,将其修改为2,那么我们再添加数据,id不就从2开始了嘛。

    22810

    MySQL 8.0 information_schema.tables表和之前版本的差异

    但在MySQL8.0去查询这些信息的时候,出现了不准确的情况,例如auto_increment。 in set (0.00 sec) 从information_schema.tables查出test1表的auto_increment是6,这时tables表信息是准确的 mysql>select auto_increment : 0 Warnings: 0 查询tables表,发现auto_increment仍然是6;在MySQL8.0以前,这时tables表的auto_increment应该是显示最新值300的 mysql row in set (0.00 sec) test1表插入操作以后,再次查询tables表,auto_increment值仍然是6 mysql>select auto_increment from `auto_increment`,0),coalesce(cast(`stat`.`cached_time` as unsigned),0),`tbl`.

    15710

    mysql replace into 的使用情况

    =5 DEFAULT CHARSET=latin1 1 row in set (0.00 sec)  发现,auto_increment并没有+1,而是针对原来的那一条id=4的记录进行了update, =6 DEFAULT CHARSET=latin1 1 row in set (0.00 sec) 我们发现,auto_increment也并没有+1,而是针对原来的那一条id=6的记录进行了update =7 DEFAULT CHARSET=latin1 1 row in set (0.00 sec) 这时候,我们发现,,auto_increment已经+1了。 当replace into 记录只与唯一索引进行冲突的时候,auto_increment + 1,再对数据进行更新。 如果insert成功,auto_increment自然+1了,然后对这条记录进行update,update的时候发现存在唯一键冲突,则delete对应的唯一键的行后再进行update。

    63430

    MySQL修改数据类型的问题总结(r10笔记第74天)

    修改完成之后查看,发现有个地方不对劲,怎么没有了auto_increment的属性。 > ALTER TABLE activity_dj_actor_info_log modify id BIGINT AUTO_INCREMENT; ERROR 1062 (23000): ALTER 而且稍后继续尝试,修改auto_increment的值,竟然没有反应。 > ALTER TABLE activity_dj_actor_info_log AUTO_INCREMENT=2147483649; Query OK, 3144627 rows affected ( > SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name="activity_dj_actor_info_log";

    433100

    面试官问:MySQL的自增ID用完了,怎么办?

    create table t0(id int unsigned auto_increment primary key) ;insert into t0 values(null); 通过show命令 show create table t0; 查看表情况 CREATE TABLE `t0` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 可以发现 AUTO_INCREMENT 已经自动变成2,这离用完还有很远, 的初始值 create table t1(id int unsigned auto_increment primary key) auto_increment = 4294967295;insert , PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4294967295 DEFAULT CHARSET=utf8 可以发现,AUTO_INCREMENT

    27930

    教师听课评课系统设计

    classId subjectId teacherId date content type status CREATE TABLE ListenClassInfo( id int not null AUTO_INCREMENT ', type int comment'课程类型', status int comment'状态', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT level int comment'等级', advise LONGTEXT comment'听课建议', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT 地址 身份证号码 状态 id name phone sex email address idCard status CREATE TABLE Teacher( id int not null AUTO_INCREMENT 级别', type int comment'类型', status int comment'状态', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT

    46240

    面试官问:MySQL的自增ID用完了,怎么办?

    create table t0(id int unsigned auto_increment primary key) ;insert into t0 values(null); 通过show命令 show create table t0; 查看表情况 CREATE TABLE `t0` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 可以发现 AUTO_INCREMENT 已经自动变成2,这离用完还有很远, 的初始值 create table t1(id int unsigned auto_increment primary key) auto_increment = 4294967295;insert , PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4294967295 DEFAULT CHARSET=utf8 可以发现,AUTO_INCREMENT

    69030

    MySQL 序列使用

    ---- 使用 AUTO_INCREMENT MySQL 中最简单使用序列的方法就是使用 MySQL AUTO_INCREMENT 来定义序列。 mysql> CREATE TABLE insect -> ( -> id INT UNSIGNED NOT NULL AUTO_INCREMENT, -> PRIMARY KEY 09-10 | front yard | +----+-------------+------------+------------+ 3 rows in set (0.00 sec) ---- 获取AUTO_INCREMENT PERL实例 使用 mysql_insertid 属性来获取 AUTO_INCREMENT 的值。 =100 charset=utf8; 或者你也可以在表创建成功后,通过以下语句来实现: mysql> ALTER TABLE t AUTO_INCREMENT = 100;

    10100

    扫码关注云+社区

    领取腾讯云代金券