2009-08-06 47 views

回答

0

你想要AUTO_INCREMENT

虽然让它在99999重置可能是一个问题。我也会质疑你的要求,它的工作方式。

+0

我不认为有重置'auto_increment'的方法,除非您删除行,截断表或重新创建列。 – Eric 2009-08-06 12:23:07

0

如果您需要重置,你可以创建一个触发器:

create trigger auto_number before insert on `sometable` 
begin 
    new.autoid = coalesce((select max(autoid)+1 from sometable),0) % 1000000 
end 

从本质上讲,当一个insert发生,这只是设置autoid列作为一个最大的ID。但是,它使用模数来确保数字重复为1,000,000。

+0

这不起作用。你会打最大自动,然后max(自动)将成为一个常数。所以你会重复生成相同的ID。更不用说最好有一个很好的索引,否则这将是/慢/。 – derobert 2009-08-07 04:21:44

+0

@derobert:....这就是OP要求的。 0至99999,然后再重复一遍。 – Eric 2009-08-07 09:48:10

1

选择数据(或通过视图)时生成一个不断递增的数字(例如,标准的auto_increment),然后,通过MOD 100000运行它:

⋮ 
99998 % 100000 = 99998 
99999 % 100000 = 99999 
100000 % 100000 = 0 
100001 % 100000 = 1 
⋮ 

可以通过创建使这种透明对于选择一个观点:

CREATE SQL SECURITY INVOKER VIEW whatever AS 
    SELECT 
    foo, bar, baz, autoid % 100000 AS autoid, taz 
    FROM base_table; 

不幸的是,这种观点可能不会更新和MySQL不支持INSTEAD OF触发,所以你必须发送写入基础表。

+0

你认为如果我让php这样做会更好吗? – EddyR 2009-08-07 05:11:39

+0

@EddyR:不知道让PHP做这件事会更好吗?你还没有描述*为什么*你想这样做。 – derobert 2009-08-08 05:28:13