http://justcode.ikeepstudying.com/2015/05/mysql-%E9%9B%86%E6%88%90%E9%9A%8F%E6%9C%BA%E5%94%AF%E4%B8%80id-mysql-unique-number-generation/

SELECT FLOOR(10000 + RAND() * 89999) AS random_number
FROM table1
WHERE “random_number” NOT IN (SELECT unique_id FROM table2)
LIMIT 1

function get_unique_username($chance=10,$show_sql=FALSE)
{
    global $conn;
 
    // connect db
    if(!$conn) connect();
 
    $output = FALSE;
    $rand   = rand(1,$chance);
 
    $sql = ‘SELECT FLOOR(’.($rand==5?‘10000 + RAND() * 89999’:‘100000 + RAND() * 899999’).') AS random_number FROM gm_users WHERE “random_number” NOT IN (SELECT unique_id FROM gm_ids) LIMIT 1';
    if($show_sql) echo $sql;
 
    $result = mysql_query($sql);
    $row    = mysql_fetch_assoc($result);
 
    if($row[‘random_number’])
    {
        $output = $row[‘random_number’];
        // insert this random_number to table gm_ids
        insert(‘gm_ids’, array(‘unique_id’=>$output));
    }
 
    return $output;

=====
http://www.debugease.com/mysql/278572.html

无法实现!变通的办法,还是直接使用 auto_increment ,然后前面加几个随机数。如果一定要做到,则可以创建一个 8 位数字的表 1,2,3,…,99999999

然后每次任意出其中一个 select * from x order by rand() limit 1取出该数据后删除

=====
http://www.yunii.com/71257.htm

4.使用mysql的 UUID()函數。前面的自增字段(auto_increment)只能生成”表內”的唯一值,且需要搭配使其爲”唯一的主鍵或唯一索引”,它的值是逐步增長的。這裏的UUID産生的是字符串類型值,固定長度爲:36個字符。UUID生成的是在時間、空間上都獨一無二的值,是“隨機+規則”組合而成。

可以看到,多次調用UUID()函數得到的值不相同,它由五部分組成,並且有連字符(-)隔開,一共36個字符。其中:

前3組值是時間戳換算過來的,解決“時間上唯一”;

第4組值是暫時性保持時間戳的唯一性,重啓mysql才會變動;

第5組是mac值轉過來的,有助于解決“空間上的唯一”,同一個機器多實例的一般相同。如果mac值獲取不到,則是一個隨機值。

這些已經可以保證得到的值在時間和空間上的唯一。當然你也可以去掉連字符: select replace(uuid(),'-','')。