VOR DER UPDATE-Triggerlösung:
Sie können eine 6-stellige zufällige alphanumerische Zeichenfolge in Großbuchstaben erstellen mit:
lpad(conv(floor(rand()*pow(36,6)), 10, 36), 6, 0);
Um keinen bereits bestehenden String zu erstellen, können Sie ein BEFORE UPDATE
verwenden Abzug.
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 ;
Jedes Mal, wenn Sie Ihren CODE
einstellen Spalte auf NULL
in einem UPDATE
-Anweisung erstellt der Trigger eine neue zufällige Zeichenfolge in einer Schleife, bis keine Übereinstimmung in der Tabelle gefunden wurde.
Jetzt können Sie alle NULL-Werte ersetzen durch:
update unique_codes set CODE = NULL where code is NULL;
In der SQLFiddle-Demo hier Ich verwende eine Zufallszeichenfolge mit einem Zeichen, um zu demonstrieren, dass kein Wert dupliziert wird.
Sie können denselben Code auch in einem BEFORE INSERT
verwenden Abzug. Auf diese Weise können Sie einfach neue Zeilen mit CODE=NULL
einfügen und der Trigger wird es auf eine neue eindeutige zufällige Zeichenfolge setzen. Und Sie müssen es nie wieder aktualisieren.
Originalantwort (32 Zeichenketten):
select lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0) as rnd_str_8;
-- output example: 3AHX44TF
generiert eine 8-stellige alphanumerische Großbuchstaben-Zufallszeichenfolge. Verketten Sie vier davon, um 32 Zeichen zu erhalten:
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
Was ist also mit der Einzigartigkeit? Nun - versuchen Sie, Duplikate zu erzeugen;-)