1.在php中用substr()字符函数取出纯数字字符串,然后可以直接进行数学加1操作,最后再加上前缀字符串即可;
2.在mysql中再添加一个表,这个表就设置一个带auto_increment属性的数值字段。以后每次添加记录的时候,先往这个表添加一个记录,然后再取出这个字段的值,加上前缀字符串后再添加到你希望写入的表中。

解决方案 »

  1.   

    2.在mysql中再添加一个表,这个表就设置一个带auto_increment属性的数值字段。以后每次添加记录的时候,先往这个表添加一个记录,然后再取出这个字段的值,加上前缀字符串后再添加到你希望写入的表中。
    ====================================================================
    有考虑过你这种方式,关键你得保证这些值是唯一的.也就是增加和取的时候不存在同一时间问题.
      

  2.   

    LAST_INSERT_ID()
    LOCK TABLES/UNLOCK TABLES
    事务
      

  3.   

    rardge(Rardge) 有没有详细一点的解决方法,最好有个例子。谢谢!
      

  4.   

    只有一个表的时候你会觉得加不加N没有区别,
    有多个表的时候你就会觉得加个字母好点。另:
    如果直接用数字,也不行,因为我不能用auto_increment。
    我有两台服务器,里面有一个一模一样的表,要互抄数据的。
      

  5.   

    因为我不能用auto_increment
    ==========================
    你到底能否用这个属性?告知,我给你提示。
      

  6.   

    1.假设你可以用auto_increment属性
     建立一个专用计数表:
     create table id_table (id int unsigned auto_increment primary key not null);
     在程序中,插入记录并且取出就是:
     insert into id_table values (null);
     select last_insert_id();
     两句SQL查询语句连用,然后根据取出的值再去加上你要前缀并写入相应的数据表。
     因为last_insert_id()是和具体客户程序相关联的,即使在发出insert和select语句的时间间隔中又有其它进程发出了insert语句来生成了新的编号,last_insert_id()检索出的仍然是它所在进程生成的序号,所以也就不需要锁定表了。你可以自己开两个mysql客户端链接来测试,分别先用insert语句插入记录,再分别用last_insert_id来看。
    2.假设你不用auto_increment属性
     建立一个专用计数表:
     create table id_table (id int unsigned primary key not null);
     并初始化:
     insert into id_table values (0);
     在程序中,插入记录并且取出就是:
     update id_table set id = last_insert_id(id + 1);
     select last_insert_id();
     两句SQL查询语句连用,然后根据取出的值再去加上你要前缀并写入相应的数据表。自己测试吧。并看MySQL手册关于last_insert_id([expr])的介绍。
      

  7.   

    TO:rardge(Rardge) 
    我明白你的意思,
    我的问题是我现在不是有多个用户,而是有多个服务器,而且服务器之间必须保持同步。
    e.g.
    host1table
    id        name
    n1000001  one
    n1000002  two
    n1000003  threehost2
    table
    id        name
    h1000001  one
    h1000002  two
    h1000003  three用auto_increment就不能达到我想要的结果!
      

  8.   

    是啊,其实是这样的。数据库提供的自动增量只能是int类型的,
    如我一个mysql,一个sqlserver数据库
    有一个user_table,
    user_id   user_nameuser_table的资料可以由sqlserver中增加,也可以从mysql中增加。
    两个服务器中的user_table并不要求实时同步,
    只要每天把mysql中更新的数据抄到sqlserver,把sqlserver中的数据抄到mysql
    我需要区分哪个是由mysql录入,如个由sqlserver录入。
    如你所说,把user_id设置成int的情况,则会出现关键字重复。http://community.csdn.net/Expert/topic/4255/4255295.xml?temp=.9007227
      

  9.   

    看了一下你原来那个帖子,感觉还是“xuzuning(唠叨)”的主意比较好!
    在mysql中,用我上面提到的第二种方法,把update id_table set id = last_insert_id(id + 1);修改为update id_table set id = last_insert_id(id + 2);即可以实现步长为2的递增(这个方法可以实现任意步长),至于奇偶数设置那个初始化变量即可。
    SQLserver如何实现步长调整我不知道了,我对SQLserver几乎一无所知。