auto_increment 问题: https://yq.aliyun.com/articles/59263?...导致auto_increment变小的几种情况: 参考: http://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html...1、 alter table xx auto_increment = yy; 2、 truncate table 3、 restart mysql 第三种的复现方法: 一张刚创建的innoDB...插入3条记录后,auto_increment=4....然后再删除掉这三条记录,这时候的auto_increment=4 没变 但是如果我们关闭MySQL,当MySQL再次起来的时候,会发现auto_increment值从4,变成1 【第三种情况,在mysql8.0
自增长,也就是auto_increment是数据库中的一个比较特殊的定义,当相应列的值给值为NULL或者不给值的时候,会触发auto_increment,对当前已经存在的字段的数字进行+1或+你给的特定值的操作...,如我上面的例子,auto_increment一般跟主键搭配操作,比较合适。...注意:在同一张表最多只能有一个自增长的字段,并且你给自增长字段赋值,这时自增长字段会失效,mysql会录入你给定的值 (1)如何查看此时表内自增长的值从几开始 ?
更新auto_increment值 在修改表的auto_increment值之前需要先查看当前值是多少: mysql> select auto_increment from information_schema.tables...显然,此时1-50002有记录,50003-60002是没有记录的。...为了使得新添加的记录自增ID再次继续从50003开始计数,执行如下语句: mysql> alter table 表名 AUTO_INCREMENT=50002; 最后总结 直接修改auto_increment...【参考】 https://blog.csdn.net/hehaoyang666/article/details/41281113 mysql自增ID起始值修改方法 https://blog.csdn.net.../fdipzone/article/details/50421831 MySql查看与修改auto_increment方法
【重学 MySQL】六十五、auto_increment 的使用 在 MySQL 中,AUTO_INCREMENT 属性用于在一个表中生成唯一的数字序列,通常用于主键(Primary...MySQL8.0 新特性:自增变量的持久化 MySQL 8.0 版本引入了自增变量的持久化这一新特性,旨在解决之前版本中自增主键在数据库重启后可能重置的问题。...背景与问题 在 MySQL 8.0 之前的版本中,如果自增主键 AUTO_INCREMENT 的值大于当前表中的最大值加1(max(primary key) + 1),在数据库重启后,AUTO_INCREMENT...自增变量持久化的引入 为了解决上述问题,MySQL 8.0 引入了自增变量的持久化特性。...总结 MySQL 8.0 的自增变量持久化特性解决了之前版本中自增主键在数据库重启后可能重置的问题。
为了验证这个怀疑的准确性,同时学习下InnoDB处理 AUTO_INCREMENT 的机制,因此在测试环境做了测试总结。 本文使用的MySQL版本为官方社区版 5.7.24。...Mixed-mode inserts(混合模式插入) 在简单插入语句当中,有的行有为自增列指定值,而有的行没有为自增列指定值。...=utf8 1 row in set (0.00 sec) --2、事务回滚,不提交 (root@localhost) [test] > rollback; Query OK, 0 rows affected...为自增列指定NULL或者0 无论 AUTO_INCREMENT 处于哪种锁模式下,如果在 INSERT 语句为自增列指定 NULL 或者 0 时,InnoDB认为并没有为自增列指定值,同时也会为其分配值...参考 https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html
注: MySQL默认隔离级别为 REPEATABLE-READ,innodb_rollback_on_timeout为OFF,本文基于innodb表(支持事务)进行测试。 1....测试过程 2.1 隔离级别REPEATABLE-READ & innodb_rollback_on_timeout =OFF a) 测试过程: session A session B mysql> begin...2.2 隔离级别为READ-COMMITTED & innodb_rollback_on_timeout =OFF a) 测试过程 session A session B mysql> show...测试过程: a) 修改配置文件,重启数据库 在my.cnf文件里添加innodb_rollback_on_timeout=on 再重启数据库即可生效 mysql> show global variables...小结 在MySQL8.0 中,仅有在隔离级别为READ-COMMITTED & innodb_rollback_on_timeout =ON情况下,事务中有超时回滚报错时,超时前sql也会回滚。
比如下面的代码: -- 刚创建表,该表没有AUTO_INCREMENT值 create table test( id int(11) primary key not null auto_increment...-- /etc/init.d/mysql restart 重启后,该表又没有AUTO_INCREMENT值了 show create table test\G; ......mysql的上述行为说明在mysql运行过程中InnoDB存储引擎的表,其AUTO_INCREMENT值会随着插入操作持续增长的,但mysql重启之后,AUTO_INCREMENT值并没有持久保存下来,...在mysql的bug跟踪系统里,上述问题已经被很多人反映了,如链接1、链接2 mysql上述行为本身也没有太大的问题,但如果业务系统将这种自增ID当成业务ID就存在问题了。...当然本质上应避免用mysql的这种自增ID作为业务ID,而且应该使用自定义的业务ID生成器。 很不幸,我们目前做的项目,在设计之初并没有考虑到这个问题,因此大量使用这种自增ID作为业务ID。
DDL CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号', `createDate` datetime...PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `course` ( `id` int(11) NOT NULL AUTO_INCREMENT...INSERT INTO `course` VALUES ('1', '计算机基础', '信息工程系', '1', '800'); INSERT INTO `course` VALUES ('2', 'MySQL...; ROLLBACK # 撤销事务中的sql操作 SET autocommit=1;# 用作关闭·自动关闭和开启事务 开启前数据: 开启事务: sql语句 执行完数据,完全没有改变,说明事务开启成功。...总结 事务就是为了方便确认一些列的DML语句是否成功,如果都成功就commit,如果有任何一个失败则rollback。
今天我们来看一下MySQL的字段约束:NULL和NOT NULL修饰符、DEFAULT修饰符,AUTO_INCREMENT修饰符。...MySQL默认情况下指定字段为NULL修饰符,如果一个字段指定为NOT NULL,MySQL则不允许向该字段插入空值(这里面说的空值都为NULL),因为这是“规定”。...当插入记录时,您老人家忘记传该字段的值时,MySQL会自动为您设置上该字段的默认值。 如果一个字段中没有指定DEFAULT修饰符,MySQL会依据这个字段是NULL还是NOT NULL自动设置默认值。...NOT NULL DEFAULT '' 不能为null 默认为 '' NULL DEFAULT NULL 可以为null 默认为null AUTO_INCREMENT 修饰符: AUTO_INCREMENT...因为其允许开发者使用MySQL为每条记录创建唯一的标识符。
【重学 MySQL】四十八、DCL 中的 commit 和 rollback 在MySQL中,DCL(Data Control Language,数据控制语言)用于管理数据库用户和控制数据的访问权限...rollback的使用场景: 当事务中的某个操作失败,或者由于某种原因需要取消整个事务时,使用rollback。...相关示例 以下是一个简单的MySQL事务处理示例,展示了commit和rollback的使用: -- 开始事务 START TRANSACTION; -- 执行一些SQL操作 INSERT INTO...; 在上面的示例中,如果INSERT和UPDATE操作都成功完成,并且没有发生任何错误,那么执行COMMIT会将这些更改永久保存到数据库中。...综上所述,commit和rollback是MySQL中非常重要的事务控制命令,它们能够确保数据的一致性和完整性,并在事务处理过程中提供灵活的错误处理机制。
问题描述: 在使用"net start mysqld" 的时候出现: MySQL 服务正在启动… MySQL 服务无法启动。 服务没有报告任何错误。...可以看到提示我们已经有一个进程占用了3306端口,而我们的mysql是默认运行在这个端口的。
作者:操盛春,爱可生技术专家,公众号『一树一溪』作者,专注于研究 MySQL 和 OceanBase 源码。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。...本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。 正文 1....准备工作 创建测试表: CREATE TABLE `t1` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `i1` int DEFAULT '0',...(10, 101), (20, 201), (30, 301), (40, 401); 删除 的记录: DELETE FROM t1 WHERE id = 40; 回滚: ROLLBACK...这个属性值硬编码为 0x00,实际上没有使用。 undo_no,值为 0。说明这是 Update Undo 段中第一条 Undo 日志。
环境说明: MySQL 5.7 、MySQL 8.0 长期以来,我的博客数据库中连续文章的主键编号一直都不是连续的,让我这个强迫症晚期患看着很不舒服。...注意: 将 0 插入到自增列中的效果等同于插入 NULL 值; 当插入记录时,如果没有为自增列指明一个值,那么也等同于插入 NULL; 使用 INSERT 语句插入记录时,如果为自增列设置了一个值...=自增值; 3、直接指定 ALTER TABLE [表名] AUTO_INCREMENT=自增值; 如果执行完以后没有效果,那么可以再执行一次 commit 指令以提交更改,使其生效。...4、修改自增字段属性 ALTER TABLE [表名] MODIFY [字段名] [字段类型和约束条件], AUTO_INCREMENT=自增值; 同样的,如果执行完以后没有效果,再执行一次 commit...这属实让我有点摸不着头脑,我也不太确定是不是 MySQL 版本不同的原因,也懒得再尝试了,所以把这种情况记录上来以供参考吧。
自增(auto_increment) 1.3.3. 非空(not null) 1.3.4. 注释 1.4. 事务 1.4.1. 关闭自动提交 1.4.2. 验证 1.4.3....接收到数据是的解码格式设置为gbk,这个位置的gbk和数据库还有表的utf8没有关系 在windows系统中修改mysql默认的数据库编码,找到安装文件中的my.ini的配置文件 在里面添加时如下代码:...右键 选择 type中选择mysql5.1 Name中选Neq Mysql Database中选择database 在最右侧如果显示connected,那么可以开始写sql语句 自定义代码块 点击...回滚(rollback) 当你之前的操作没有提交的话,那么你使用rollback这个命令,那么就会回滚到初始状态 回滚点(savepoint) 前提是没有设置了自动提交,才能回滚到保存点 savepint...begin 起始点 savepoint s(标识) 设置回滚点 commit 提交 rollback 回滚 rollback to … 回滚到指定的回滚点 SQL分类 数据库定义语言 DDL Data
上周同事小姐姐问我:“哥你看,我发现MySQL有bug,我下午为了清理磁盘,明明删除了100万条MySQL数据,磁盘不仅没有变小,反而更满了呢??” 那你是怎么删除的?...7、delete 操作是一行一行执行删除的,并且同时将该行的的删除操作日志记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,生成的大量日志也会占用磁盘空间。...而delete后表仍然保持auto_increment。 对于InnoDB,truncate会重置auto_increment的值为1。delete后表仍然保持auto_increment。...但是在做delete整个表之后重启MySQL的话,则重启后的auto_increment会被置为1。 也就是说,InnoDB的表本身是无法持久保存auto_increment。...实质上重启后的auto_increment会从 SELECT 1+MAX(ai_col) FROM t 开始。 4、小心使用 truncate,尤其没有备份的时候。
: 10000001 auto_increment_ratio: 0.0047 2 rows in set (0.04 sec) mysql> 通过比较 max_value,auto_increment...简单来说,自增列的值有一个特点:一旦被使用之后,是不会被 rollback 的,因此当各类 insert 操作被回滚之后,自增列的值就被“浪费了”。...实际上这个 rollback 指代的不仅仅是回滚,而是指那些拿到了自增列值,但是没有实际 insert 数据的场景。...因此除了 rollback 事务的场景以外,需要特别关注的就是 REPLACE 和 INSERT…ON DUPLICATE KEY UPDATE,因为这两个操作会获取自增列的值,但是经常不会触发 insert...另外一种问题场景就是 MySQL 自身各个表之间有外键关系,但是没有建立外键约束,也会遇到类似的问题。
修改 的记录: UPDATE `t6` SET `mobile` = '17988179888', `address` = '水帘洞' WHERE `id` = 35; 回滚: ROLLBACK...这个属性值硬编码为 0x00,实际上没有使用。 undo_no,值为 0。说明这是 Update Undo 段中第一条 Undo 日志。 table_id,值为 1431。
上周同事小姐姐问我:“哈哥你看,我发现MySQL有bug,我下午为了清理磁盘,明明删除了100万条MySQL数据,磁盘不仅没有变小,反而更满了呢??” 那你是怎么删除的?...7、delete 操作是一行一行执行删除的,并且同时将该行的的删除操作日志记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,生成的大量日志也会占用磁盘空间。...而delete后表仍然保持auto_increment。 对于InnoDB,truncate会重置auto_increment的值为1。delete后表仍然保持auto_increment。...但是在做delete整个表之后重启MySQL的话,则重启后的auto_increment会被置为1。 也就是说,InnoDB的表本身是无法持久保存auto_increment。...4、小心使用 truncate,尤其没有备份的时候,如果误删除线上的表,记得及时联系中国民航,订票电话:400-806-9553 3、drop Drop table Tablename 1、drop:
有bug,我下午为了清理磁盘,明明删除了100万条MySQL数据,磁盘不仅没有变小,反而更满了呢??”...7、delete 操作是一行一行执行删除的,并且同时将该行的的删除操作日志记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,生成的大量日志也会占用磁盘空间。...而delete后表仍然保持auto_increment。 对于InnoDB,truncate会重置auto_increment的值为1。delete后表仍然保持auto_increment。...但是在做delete整个表之后重启MySQL的话,则重启后的auto_increment会被置为1。 也就是说,InnoDB的表本身是无法持久保存auto_increment。...4、 小心使用 truncate,尤其没有备份的时候,如果误删除线上的表,记得及时联系中国民航,订票电话:400-806-9553 3、drop Drop table Tablename 1、drop
Statement Level:基于SQL语句复制的,只会讲SQL语句存储到日志中,因为这种模式只存储SQL,没有真正的数据,所以我们无法进行数据恢复。生产环境也一般不用这种模式。...Row Level:它是基于行的复制,并且会将每一条数据的变化记录到日志文件中,是没有sql语句的,可以解析出数据,一些生产环境是使用这种模式,但是它也有一定的缺点,比如记录数据时产生大佬的binlog...我们先用binlog-rollback试一下,其实这就是给perl脚本。...[root@localhost ~]# perl binlog-rollback.pl -f '/u01/mysql/3306/log/binlog/mysql-bin.000009' -h 127.0.0.1...总结:正向解析sql我们可以使用mysql自带的mysqlbinlog,反向解析我们可以使用binlog-rollback和MyFlash。