mysql產生不重複隨機數(unique number generation)

來源:互聯網
上載者:User

標籤:限制   nio   row   get   target   商品   tail   article   條件查詢   

轉自:http://blog.csdn.net/dreamer2020/article/details/52049629

問題來源

業務中有時會遇到要產生不重複隨機數的情況,例如,新產生一個商品編號、房間編號、或者其他物品編號等。不願意採用表的自增索引 id,同時又希望新產生的編號是不重複的。

這就需要考驗mysql的隨機數功能了。

Solution

mysql的rand函數可以產生一個0到1之間的隨機數,進行一定的放大即可得到一個隨機數。再通過條件查詢來限制新隨機數沒有在表中出現過。如下所示:

SELECT FLOOR(RAND() * 99999) AS random_numFROM numbers WHERE "random_num" NOT IN (SELECT my_number FROM numbers)LIMIT 1

然而經過實測,該辦法在表空時返回也為空白。考慮到表空的情形,加一個集合,如下:

SELECT random_numFROM (  SELECT FLOOR(RAND() * 99999) AS random_num   FROM numbers  UNION  SELECT FLOOR(RAND() * 99999) AS random_num) AS ssWHERE "random_num" NOT IN (SELECT my_number FROM numbers)LIMIT 1

通過union欄位在表空時,直接擷取一個隨機數返回。

延伸:mysql隨機取記錄

基本思路:隨機排序。

select * from numbers order by rand() limit 1

這行命令就可以從表中隨機播放一條記錄。如何是隨機播放多條,如下

select * from numbers order by rand() limit 10

據說,order by rand()的辦法效率不好,本人也沒有在記錄多的表測過。在規模不大的前提下,用這個辦法應該是最簡單的。如果要考慮效率,請參考文末的連結。

附連結

How to Generate Random number without repeat in database using PHP?

mysql unique number generation

MySQL select 10 random rows from 600K rows fast

mysql產生不重複隨機數(unique number generation)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.