Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Уникальны поля в таблице  [new]
polygraph
Member

Откуда:
Сообщений: 7
Здравствуйте, помогите , пожалуйста составить хранимую процедуру в MySQL.
Есть таблица
В ней
Id(PK)
Ключ (varchar)
Id games (FK)
Необходимо составить хранимую процедуру, которая будет в поле ключ генерировать случайный не повторяющий ключ из символов и цифр , длинной 8 символов, отличных от тех, которые уже имеются в этой таблице в поле ключ
Т.е.

1 | gjuuffc |1
2 |hcjcc56 |1

Если сгенерированная опять ключ hcjcc56, то нельзя его добавить, и сгенерировать новый
17 май 21, 21:16    [22323354]     Ответить | Цитировать Сообщить модератору
 Re: Уникальны поля в таблице  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21181
Функция генерации:

CREATE FUNCTION generate_password (p_alphabet VARCHAR(255), p_length INT)
RETURNS VARCHAR(255)
RETURN (WITH RECURSIVE
        cte AS ( SELECT 1 n UNION ALL SELECT n + 1 FROM cte WHERE n < p_length)
        SELECT GROUP_CONCAT(SUBSTRING(p_alphabet FROM CEIL(RAND() * LENGTH(p_alphabet)) FOR 1) SEPARATOR '')
        FROM cte);


Функция генерации с проверкой:

CREATE FUNCTION generate_and_check()
RETURNS CHAR(8)
BEGIN
    DECLARE unique_key CHAR(8);
    REPEAT
        SET unique_key := generate_password('qwertyuiopasdfghjklzxcvbnm0123456879', 8);
    UNTIL !COALESCE(( SELECT COUNT(*) FROM mytable WHERE key_column = unique_key ), 0)
    END REPEAT;
    RETURN unique_key;
END


fiddle
17 май 21, 21:46    [22323366]     Ответить | Цитировать Сообщить модератору
 Re: Уникальны поля в таблице  [new]
polygraph
Member

Откуда:
Сообщений: 7
Спасибо большое
18 май 21, 22:33    [22323855]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить