千家信息网

如何解决mysql中auto_increment的问题

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关如何解决mysql中auto_increment的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql中的auto_increm
千家信息网最后更新 2025年11月07日如何解决mysql中auto_increment的问题

这篇文章将为大家详细讲解有关如何解决mysql中auto_increment的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

mysql中的auto_increment的问题

今儿在逛时,发现一个看似很简单的问题,却引起了大家的广泛关注:
这是一道很早的面试题:

一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,
再insert一条记录,这条记录的ID是18还是15 。 www.2cto.com
答案:
如果表的类型是MyISAM,那么是18。
因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。
如果表的类型是InnoDB,那么是15。
InnoDB表只是把自增主键的最大ID记录到内存中,所以重启或者是对表进行OPTIMIZE操作,
都会导致最大ID丢失。
自己也做了个实验,结果证实了上面的说法。真是惭愧啊,看似简单的问题自己也打错了。
[html]
> select * from test1;
+----+-----------+
| id | name |
+----+-----------+
| 1 | 陈兵辉 |
| 2 | chen |
| 3 | chen |
| 4 | chen |
| 5 | chen |
| 6 | chen |
| 7 | chen |
| 8 | chen |
| 9 | chen |
| 10 | chen |
| 11 | chen |
+----+-----------+
11 rows in set (0.00 sec)
www.2cto.com
mysql> delete from test1 where id in (10,11,9);
Query OK, 3 rows affected (0.03 sec)

mysql> show create table test1;
CREATE TABLE `test1` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 |
mysql> exit;
Bye
[root@fsailing1 ~]# service mysqld restart
停止 MySQL: [确定]
启动 MySQL: [确定]
[root@fsailing1 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.95 Source distribution
Copyright (c) 2000, 2011, and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show create table test1;
| CREATE TABLE `test1` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 | www.2cto.com

2,另外还有一个就是获取当前数据库表的自增字段数。
[html]
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)



关于"如何解决mysql中auto_increment的问题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

问题 最大 篇文章 数据 更多 类型 不错 实用 惭愧 一道 内存 内容 只是 字段 就是 数据库 文件 文章 知识 答案 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 齐播互联网科技山东 数据库的安全性概述 数据库检索分数是0代表什么 网络安全是智能家居的命门吗 计算机网络技术和计算机应用计算 网络安全管控建议 安装神通数据库对服务器要求 信息网络技术更新太快太快 手机服务器地址是什么 中国刑法第二十七条的网络安全法 网络安全威胁的安全服务机制 上海网络技术咨询零售价格 西安汇丰软件开发公司 深圳服务器电源价格怎么样 河北服务器品牌 工业互联网引领科技制造 网络技术网络规划与设计 网络安全设备采购规范 平凉网络安全工程师证 北京电脑软件开发服务 西安热工院网络安全研究院 中国网络安全教育考题 写一篇网络安全倡议书 数据库要搭配软件使用吗 网络安全生产自查报告 当前服务器无法登录 魔兽世界里怎样查服务器开服的 花生棒 数据库 pg数据库将时间字符串插入 linux 删库数据库
0