1.在php中用substr()字符函数取出纯数字字符串,然后可以直接进行数学加1操作,最后再加上前缀字符串即可;
2.在mysql中再添加一个表,这个表就设置一个带auto_increment属性的数值字段。以后每次添加记录的时候,先往这个表添加一个记录,然后再取出这个字段的值,加上前缀字符串后再添加到你希望写入的表中。
2.在mysql中再添加一个表,这个表就设置一个带auto_increment属性的数值字段。以后每次添加记录的时候,先往这个表添加一个记录,然后再取出这个字段的值,加上前缀字符串后再添加到你希望写入的表中。
====================================================================
有考虑过你这种方式,关键你得保证这些值是唯一的.也就是增加和取的时候不存在同一时间问题.
LOCK TABLES/UNLOCK TABLES
事务
有多个表的时候你就会觉得加个字母好点。另:
如果直接用数字,也不行,因为我不能用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])的介绍。
我明白你的意思,
我的问题是我现在不是有多个用户,而是有多个服务器,而且服务器之间必须保持同步。
e.g.
host1table
id name
n1000001 one
n1000002 two
n1000003 threehost2
table
id name
h1000001 one
h1000002 two
h1000003 three用auto_increment就不能达到我想要的结果!
如我一个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
在mysql中,用我上面提到的第二种方法,把update id_table set id = last_insert_id(id + 1);修改为update id_table set id = last_insert_id(id + 2);即可以实现步长为2的递增(这个方法可以实现任意步长),至于奇偶数设置那个初始化变量即可。
SQLserver如何实现步长调整我不知道了,我对SQLserver几乎一无所知。