Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं अपने MySQL तालिका कॉलम में से किसी एक के लिए एक अद्वितीय, यादृच्छिक स्ट्रिंग कैसे उत्पन्न करूं?

अद्यतन ट्रिगर समाधान से पहले:

आप इसके साथ एक 6 वर्ण यादृच्छिक अक्षरांकीय अपरकेस स्ट्रिंग बना सकते हैं:

lpad(conv(floor(rand()*pow(36,6)), 10, 36), 6, 0);

पहले से मौजूद स्ट्रिंग न बनाने के लिए आप BEFORE UPDATE . का उपयोग कर सकते हैं चालू कर देना।

DELIMITER //
CREATE TRIGGER `unique_codes_before_update`
BEFORE UPDATE ON `unique_codes` FOR EACH ROW 
BEGIN
    declare ready int default 0;
    declare rnd_str text;
    if new.CODE is null then
        while not ready do
            set rnd_str := lpad(conv(floor(rand()*pow(36,6)), 10, 36), 6, 0);
            if not exists (select * from unique_codes where CODE = rnd_str) then
                set new.CODE = rnd_str;
                set ready := 1;
            end if;
        end while;
    end if;
END//
DELIMITER ;

हर बार जब आप अपना CODE सेट करते हैं कॉलम से NULL एक UPDATE . में स्टेटमेंट, ट्रिगर लूप में एक नया रैंडम स्ट्रिंग बनाएगा जब तक कि टेबल में कोई मैच नहीं मिलता।

अब आप सभी NULL मानों को इसके साथ बदल सकते हैं:

update unique_codes set CODE = NULL where code is NULL;

SQLFiddle डेमो यहां में मैं यह प्रदर्शित करने के लिए एक वर्ण यादृच्छिक स्ट्रिंग का उपयोग करता हूं कि कोई मान डुप्लिकेट नहीं है।

आप उसी कोड का उपयोग BEFORE INSERT . में भी कर सकते हैं चालू कर देना। इस तरह आप केवल CODE=NULL . के साथ नई पंक्तियाँ सम्मिलित कर सकते हैं और ट्रिगर इसे एक नई अनूठी यादृच्छिक स्ट्रिंग पर सेट कर देगा। और आपको इसे फिर कभी अपडेट करने की आवश्यकता नहीं होगी।

मूल उत्तर (32 वर्ण स्ट्रिंग):

select lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0) as rnd_str_8;

-- output example: 3AHX44TF

एक 8-वर्ण अल्फ़ान्यूमेरिक अपरकेस यादृच्छिक स्ट्रिंग उत्पन्न करेगा। 32 वर्ण प्राप्त करने के लिए उनमें से चार को संयोजित करें:

select concat(
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0),
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0),
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0),
    lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0)
) as rnd_str_32;

-- output example: KGC8A8EGKE7E4MGD4M09U9YWXVF6VDDS

http://sqlfiddle.com/#!9/9eecb7d/76933

तो विशिष्टता के बारे में क्या? अच्छा - डुप्लीकेट जेनरेट करने का प्रयास करें;-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक कॉलम के साथ MySQL कर्सर आधारित पेजिनेशन

  2. गलत स्ट्रिंग मान:'\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL

  3. मैसकल इनर OR कंडीशन के साथ जुड़ें?

  4. किसी अन्य तालिका में पंक्ति सम्मिलित करने के लिए MySQL ट्रिगर कैसे प्रोग्राम करें?

  5. डेटाबेस में वगैरह जैसे सिंबल होते हैं, क्या करें?