• 专注于网站建设,网络推广,关键词优化,SEO优化,专业的网站建设开发团队!
首页 > IT技术 > MySQL > 内容

从MySQL中获得数据表auto_increment值的方法

2015-06-11 21:57:59   来源:叶景网络
    在插入一行数据前就想要知道将要产生的id。比如说想用来命名上传的文件。如果不事先获得id就不知道文件名,就没法在插入时把文件路径保存到数据库里了。如果不需要事先获得id,大可以在插入后调用mysql_insert_id()或者执行select last_insert_id(),就不必往下看了。为了照顾性急的同学,先给答案:
    $result = mysql_query("show table status like 'tablename'");
    $id = mysql_result($result, 0,'Auto_increment');
    其中tablename要换成数据表名,$id就是auto_increment列的下一个值。只有这种办法好用,php的 mysql_insert_id(),MySQL的select last_insert_id()、select @@last_insert_id、select @@insert_id、select @@identity全都不行。想知道为什么的话继续往下看。
    首先要搞清一点,除非手动指定,auto_increment是不用重复值的。比如说你新建一张表,然后插入3行数据,id值是1、2、3,没有问题。如果你把2、3那两行删掉,然后再插入一行数据,它的id值是多少呢?是2么?是4!也许有的同学会想:不对呀?MySQL参考手册上不是写了么:
    当您向一个已编入索引的AUTO_INCREMENT列中插入一个NULL值(建议)或0时,此列被设置为下一个序列的值。通常情况下为value+1,此处value是当前在表中的列的最大值。
    没错,但是MySQL参考手册上也写了:
    如果您删除的行中包括用于AUTO_INCREMENT列的最大值,则该值被重新用于BDB表,但是不会被用于MyISAM表或InnoDB表。
    BDB是啥?查了一下,是BerkeleyDB。我看了一下我的MySQL 5.0.51b,根本找不到这个引擎啊。依我看,这两条根本就是自相矛盾,而试验的结果是前者错后者对。所以下面这种写法就不行了:
    select max(id)+1from tablename
    那么php的mysql_insert_id()函数呢?php手册上写着:
    如果上一查询没有产生AUTO_INCREMENT的值,则mysql_insert_id()返回0。
    那么如果刚刚删除了一行数据现在又想插入怎么办呢?显然想在插入前取到值是不能用它的。那么MySQL的last_insert_id()函数呢?MySQL参考手册里说:
    LAST_INSERT_ID() LAST_INSERT_ID(expr)
    自动返回最后一个INSERT或UPDATE问询为AUTO_INCREMENT列设置的第一个发生的值。
    那么如果是在第一次插入数据之前呢?如果数据服务器重启了呢?显然也不能用。而且奇怪的是,我试验的结果是这个函数一直返回0,不知怎么搞的。全局变量我也试了,个个都为0,真神了。
    综上,只有show table status不受任何限制,可以随时获得数据表的auto_incerement值。它是查询表状态的数据库管理语句,同时还返回好多有用的信息,比如数据引擎、创建时间、整理(校对)字符集什么的。因为语法不支持嵌套进select里,也只有全部查出来了。这下就不用管什么插入前后啦!
    原文:http://blog.chinaunix.net/uid-20525206-id-1935733.html
    PS
    $result = mysql_query("SHOW TABLE STATUS LIKE 'events'");
    $values = mysql_fetch_array($result);
    $auto_increment_value = $values['Auto_increment'];
叶景网络,网络推广,网站建设
特别推荐RECOMMEND
搜索引擎网站关键词seo优化的意义
视频推广怎么做
网站seo优化怎么做关键词排上首页?
SEO介绍什么叫搜索引擎网站关键词优化
seo优化怎样做提升关键词排名
热点图文Hot
MYSQL中导入大小超过2M的数据库文件解决办法 MYSQL中导入大小超
从MySQL中获得数据表auto_increment值的方法 从MySQL中获得数据
MySQL 错误1418 的原因分析及解决方法 MySQL 错误1418
MySQL group by 排序问题 MySQL group by 排序问题
关注排行RANKING
1

MYSQL中导入大小超过2M的数据库文件...

MYSQL中导入大小超过2M的数据库文件解决办法 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

2

从MySQL中获得数据表auto_increment值的方法

从MySQL中获得数据表auto_increment值的方法 在插入一行数据前就想要知道将要产生的id。比如说想用来命名上传的文件。如果不事先...

3

MySQL 错误1418 的原因分析及解决方法

MySQL 错误1418 的原因分析及解决方法 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

4

MySQL group by 排序问题

MySQL group by 排序问题 id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联), subject 为回复...

5

MySQL-bin导致阿里云LNMP20G系统盘...

MySQL-bin导致阿里云LNMP20G系统盘不够用处理方法 在MySQL数据库中,mysql-bin 000001、mysql- bin 000002等文件是数据库的操作日志,...

6

LNMP更改网站文件和MySQL数据库的存放目录

LNMP更改网站文件和MySQL数据库的存放目录 购买阿里云服务器,一般建议买一个数据盘,也就是系统盘和数据盘分开,将网站文...

7

MySQL无法启动ERROR! MySQL is r...

MySQL无法启动ERROR! MySQL is running but PID file could not be found ? 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领...

8

LNMP关闭MySQL日志保护硬盘空间

LNMP关闭MySQL日志保护硬盘空间 今天发现VPS硬盘居然快满了。第一反应是:肯定是某个东西的日志文件造成的,因为以前在W...

9

MySQL数据库批量修改表前缀的方法

MySQL数据库批量修改表前缀的方法 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...