如题,如何创建一个9位数的主键,它必须是随机的、独一无二的,不重复,且范围在100000000到999999999之间?并且这种方法必须能够在Godaddy服务器上运行,因为Godaddy有许多限制。
如题,如何创建一个9位数的主键,它必须是随机的、独一无二的,不重复,且范围在100000000到999999999之间?并且这种方法必须能够在Godaddy服务器上运行,因为Godaddy有许多限制。
create table numbers (
numberid int auto_increment primary key,
n varchar(10) not null unique
);
然后您需要使用循环创建数字。直到成功为止,请执行以下操作:
insert into numbers (n)
select cast((rand(*) * 900000000) + 1000000000 as varchar);
last_inserted_id()
来获取最近插入的数字。唯一
约束是一个数据库保证。如果两个用户尝试插入相同的数字,则其中一个插入将失败。 - Gordon Linoffcreate trigger tr_setid before insert on mytable for each row
set new.id := (
select mod ((count(*) ^ 42) * 479001599 + 714320596, 900000000)+100000000
from mytable);
如果您从表中删除记录,那么此系统就不好用了,因为该解决方案假定每次触发器运行时count(*)
会增加一个。
乘数是质数而不是900000000的除数,确保在访问所有可能的数字之前不会生成重复的数字。
^
运算符只是将count(*)
映射,以使生成的系列稍微不那么可预测。
使用此触发器,表中的前10条记录将获得这些id
值:
232387754
711389353
174384556
653386155
348394150
827395749
290390952
769392551
900374962
479376561