如何使用mysql实现插入数据时为该条数据生成一个随即不重复的ID(不使用自增)?
例如:
我有一个表'a'
里面有2个字段'id'、'name',
当我执行'insert into a(id) values('sss')'时,
字段ID生成一个随即数字。

解决方案 »

  1.   

    另外用一个辅助表。 create table seqSeed(id ...)
    然后生成1,2,3...10000足够你用的数字在这个表中。然后在trigger中利用rand生成随机数N (1 , count(*) of seqSeed),然后limit N,1一下就拿到这个数字N对就的记录。并在INSERT之后,删除从sqlSeed这条记录,以确保不重复。.
        [align=center]====  ====
    [/align]
    .
    贴子分数<20:对自已的问题不予重视。
    贴子大量未结:对别人的回答不予尊重。
    .
      

  2.   

    有意思!我来翻译一下ccssddnnhelp的内容:1、建一个表seqSeed,只有一个字段就id(bigint)
    2、向这个表的id字段Insert 1,2,3,4,5.........N到你够用为止,以后不够用还可以加。
    3、通过trigger触发器,利用rand生成随机数N范围在1-(select count(*) from seqSeed)
       通过select id from seqSeed limit N就得到了这个id,同时在此trigger中做一次delete from seqSeed where id=N这就做出你要的效果了!
      

  3.   

    ccssddnnhelp的方法耗费太大,有更实用的吗?
      

  4.   

    想要耗费不大,就用自增或者GUID.
    或者你可以自己控制ID,就是自己模拟自增或者GUID.
      

  5.   

    当然也可以在trigger中,生成rand,然后先检查是否已经有这个数字了,如果有的话再生成一个新的。如果没有,则可以insert..
        [align=center]====  ====
    [/align]
    .
    贴子分数<20:对自已的问题不予重视。
    贴子大量未结:对别人的回答不予尊重。
    .