[轉]Mysql 集成随机唯一id 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(),'-','')。