PHP/MySQL - Best way to create unique random string?

后端 未结 10 2140
囚心锁ツ
囚心锁ツ 2020-12-15 04:20

How do I create a random unique string in MySQL?

when I need to create a random string in PHP I use this function:

public function generateString($le         


        
10条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-15 05:03

    DELIMITER $$
    
    USE `temp` $$
    
    DROP PROCEDURE IF EXISTS `GenerateUniqueValue`$$
    
    CREATE PROCEDURE `GenerateUniqueValue`(IN tableName VARCHAR(255),IN columnName VARCHAR(255)) 
    BEGIN
        DECLARE uniqueValue VARCHAR(8) DEFAULT "";
        WHILE LENGTH(uniqueValue) = 0 DO
            SELECT CONCAT(SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1),
                    SUBSTRING('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789', RAND()*34+1, 1)
                    ) INTO @newUniqueValue;
            SET @rcount = -1;
            SET @query=CONCAT('SELECT COUNT(*) INTO @rcount FROM  ',tableName,' WHERE ',columnName,'  like ''',@newUniqueValue,'''');
            PREPARE stmt FROM  @query;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        IF @rcount = 0 THEN
                SET uniqueValue = @newUniqueValue ;
            END IF ;
        END WHILE ;
        SELECT uniqueValue;
        END$$
    
    DELIMITER ;
    

    Use this stored procedure and call this stored procedure as

    Call GenerateUniqueValue('tableName','columnName')
    

提交回复
热议问题