>>我在插入第一条记录时
>>通过 last_insert_id 获取 Id 号,以后就每插入一条记录就 id 自动加 1数据库不是只为你服务的,你要保证在你插入的过程,别人无法插入,所以要用到锁。>>我希望在插入第一条记录之前就获得表所维护的 id 的最大值。怎么办?无法理解

解决方案 »

  1.   

    1. 只有我一个人具有写数据库的权限,因此无需考虑其它地方对数据库的操作。2. 我不知道设置了auto_increment的表是如何处理的,我认为是数据库维护了一个 id 号,指示下一个要插入的记录的 Id,该 id 比数据库中已有的最大的 id 号多 1。当插入一条记录时 id  号自动加 1。为什么我认为是数据库维护了一个 id 号呢?因为当清除该表后再插入一条记录时,id 号并不为 0, 而是从最后一次的 id 继续增长,所以我认为数据库中维护了一个变量,来保存最大的 id 号。恕我罗里罗嗦,不知道楼上的大哥还是“无法理解”吗?我的问题是:while(...)   //循环 100000 次
    {
         insert a record to table;
         id = last_insert_id();  //需要访问数据库,代价太大
         porcess( id );
    }我想改为: id= get the biggest id ;  //访问一次数据库while(...) //循环 100000 次
    {
         insert a record to table;
          porcess( id ++);
    }如何实现:id= get the biggest id ;  ? 我用 last_insert_id() 得不到结果,只能在插入一条记录后,用该方法才有效。谢谢!
      

  2.   

    呵呵.
    楼主的要求可以这样子得到.SELECT MAX(id) FROM recordTable;
    这里得到的就是最大的ID, 新插入一条记录后.新记录ID 为该数值+1不过楼主这个方法的确有点....:)
    你的代码要保证的是.
    A: 只有你一人在向 recordTable 表中插入记录
    B: 你的代码必须是单线程运行.
    C: 你的应用程序不可以运行多个实例.
      

  3.   

    谢谢楼上的兄弟,但你的方法还是不对的。用MAX(id)只能获得当前表中最大的Id号,如果表清空了,就会返回-1(?)。比如说,我的表中已经插入了1000条记录,然后清空。在下一次插入一条记录的时候,mysql设置的 id 号是1001,因此我的要求是在插入这条记录之前得到这个1000,而不是用MAX(id)得到的-1。
      

  4.   

    哦.SHOW TABLE STATUS LIKE 'recordTable';
    获取返回结果集中的  Auto_increment  列.
    该列值就是下一个自增值了.