当前位置:  数据库>mysql

解析mysql中的auto_increment的问题

    来源: 互联网  发布时间:2014-10-10

    本文导语:  今儿在逛论坛时,发现一个看似很简单的问题,却引起了大家的广泛关注:这是一道很早的面试题:一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ...

今儿在逛论坛时,发现一个看似很简单的问题,却引起了大家的广泛关注:
这是一道很早的面试题:
一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 。
答案:

如果表的类型是MyISAM,那么是18。
因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。
如果表的类型是InnoDB,那么是15。
InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。

自己也做了个实验,结果证实了上面的说法。真是惭愧啊,看似简单的问题自己也打错了。

代码如下:

mysql> 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)

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, Oracle 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 |


2,另外还有一个就是获取当前数据库表的自增字段数。
代码如下:

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                0 |
+------------------+
1 row in set (0.00 sec)


    
 
 

您可能感兴趣的文章:

  • 为什么我在使用nslookup命令的时候,正向解析(域名-》ip)没有问题,反向解析(ip-》域名)怎么查不到呢?
  • 服务器本机能解析域名,其它机子都解析不到,能ping通dns服务器地址,是什么问题?//
  • linux 域名解析问题(dns)
  • xerces c++解析中文的问题
  • 请教各位高手关于Linux下的DNS解析问题?
  • 100分请教域名解析问题
  • dns解析问题
  • 域名解析问题,头痛死了!
  • 急!请问一个域名解析问题。很奇怪的。请忙解决一下
  • 高分请教域名解析问题。
  • 求教JAVA中XML解析问题
  • VIM解析注释问题
  • libxml2库解析xml文件出现的问题
  • 问一个域名解析得问题?????
  • 急!!!在线等!!!关于unix地址解析的问题
  • C语言解析XML报文的问题
  • linux上的上网问题域名无法解析???
  • linux 多线程实现域名解析的问题!
  • 关于xml解析速度问题!用森么解析xml最快!xml为小文件!附源程序(JDOM)
  • JAVA 里用XSL解析XML文档时中文问题的解决,请教各位!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 请教redhat9下什么命令执行arp解析和逆向arp解析
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 如何用libxml2 默认解析器解析HTML文件
  • 基于Python的Html/xml解析库Beautiful Soup 4.2.1发布
  • linux能否成为动态域名解析客户端的动态域名解析服务器?
  • html中<radio>单选按钮控件标签用法解析及如何设置默认选中
  • 配置DNS服务器后,服务器可解析,客户端不能解析。求解
  • Python下Html/xml解析库Beautiful Soup快速入门教程
  • 我有一个DNS服务器,既要解析自己局域网里IP,有要解析外网上的IP,如www.163.com,我该如何设置呢
  • 基于Python的html解析库:pyquery最新版主页及pyquery下载
  • 请问怎样手工的解析XML文件啊.( 不借助任何的xml解析器)急!!!
  • python下xml解析库lxml最新版下载安装以及代码示例
  • 通过shell解析文件,并根据解析内容生成新的文件。
  • python对XML的解析方法(SAX,DOM,ElementTree)介绍
  • java 公式解析 表达式解析 expression-analyzer
  • php通过pack和unpack函数实现对二进制数据封装及解析
  • 请问各位:我用SUN公司的JAXP开发包解析XML文档,可不知道对XML解析后如何将结果写回文件中。请各位熟悉Java和XML的高手帮忙。
  • html中<checkbox>标签用法解析及如何设置checkbox复选框的默认选中状态
  • java解析xml之jdom解析xml示例分享
  • html中<select>标签用法解析及如何设置select的默认选中状态
  • java解析xml之dom解析xml示例分享


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3