易截截图软件、单文件、免安装、纯绿色、仅160KB

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

问题是这样的:在插入一行数据前就想要知道将要产生的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)+1 from 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不受任


相关文档:

让MySQL数据库服务器支持远程连接

1、在控制台执行 mysql -u root -p mysql,系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台,这个命令的第一个mysql是执行命令,第二个mysql是系统数据名称,不一样的。
2、在mysql控制台执行 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MyPassword' WITH GRANT OPTION;
3、在mysql控制 ......

solaris10下mysql安装于配置 转载


前次写了个程序跑在solaris10上,要用到mysql数据库,去sun网站上下一个过来,
然后pkgadd mysql5.* 什么提示都没,就安装完成了,郁闷的事情就这样发生了──
我不知道MYSQL的默认用户名密码是什么,按照WINDOWS中使用的经验试了N遍,
不行!只好GOOGLE了,好不容易搞定。一下为GOOGLE之内容,非原创
Unix&Linux ......

mysql sql语句中的limit用法

1、select * from tablename <条件语句> limit 100,15
从100条记录后开始(不包括第100条记录)取出15条记录 (实际取出的是第 101-115条记录数据) 
2、select * from tablename <条件语句> limit 15
取出 前15条记录数据,limit 15相当于 limit 0,15 ......

查看 MySql 字符集

MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令。包括查看 MySQL 数据库服务器字符集、查看 MySQL 数据库字符集,以及数据表和字段的字符集、当前安装的 MySQL 所支持的字符集等。
一、查看 MySQL 数据库服务器和数据库字符集。
mysql> show variables like '%char%';
+-- ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号