MySQL автоматически генерирует значения - PullRequest
0 голосов
/ 13 февраля 2012

Я ищу сложный код SQL, у меня есть один прямо сейчас, чтобы сгенерировать случайное значение между 0 - 100000, когда оно не существует.

Теперь мне нужен следующий уровень, мне нужно вставить новое значение, когда значение представляет собой его случайную строку, его начало начинается с 1, и мне нужно изменить это значение (число диаграмм) на 32, когда строка теперь будет возвращать строку на 32 символа.

Строка содержит все типы символов, включая спикальные диаграммы.

Проблема в том, что я использую этот алгоритм для дисконтных ваучеров, и у чисел не так много комбинаций, как у чисел с символами a-z.

Я надеюсь, что кто-нибудь может помочь мне в моих поисках.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Функция для генерации случайной строки из набора символов по вашему выбору:

DELIMITER $$

CREATE FUNCTION random_str() RETURNS char(32)
BEGIN
  DECLARE chars varchar(500);
  DECLARE rs char(32);
  SET rs = '';
  SET chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*_';
  WHILE (LENGTH(rs) < 32) DO
    SET rs = CONCAT(rs, SUBSTRING(chars, RAND() * LENGTH(chars), 1));
  END WHILE;
  RETURN rs;
END

Уникальный индекс в вашем поле значения:

ALTER TABLE my_table 
ADD UNIQUE INDEX IX_str (str);

Тогда я бы просто поймал исключительную ситуацию в моем клиентском коде, или вы могли бы сделать что-то подобное, чтобы вставить новые значения:

DECLARE c int;
DECLARE rs char(32);
SET c = 1;
WHILE (c > 0) DO
  SET rs = random_string();
  SELECT c = COUNT(*) FROM my_table WHERE str = rs;
END WHILE;
INSERT INTO my_table (str) VALUES (rs);
0 голосов
/ 13 февраля 2012

почему вы все еще не сохраняете случайное число, а вставляете через пароль или sha1, это, по сути, забирает вашу RAND и шифрует RAND для создания случайной строки.вам просто не нужно расшифровывать его, потому что зашифрованное значение rand является вашей случайной строкой.

другой способ - создать GUId на стороне вашего кода

...