Mysql 如何在添加新的随机字符串之前进行检查?

Mysql 如何在添加新的随机字符串之前进行检查?,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有一个包含许多行的数据库,我想用一个4个字符的random string0-9a-zA-Z更新每行中的一列,但要确保该随机字符串不存在 重要的一点是,所有列都应该用唯一字符串更新,我不知道如何做到这一点,可能是在随机字符串已经存在的情况下重新创建一个新的随机字符串 因此,在最后,例如,如果数据库包含500000行,则所有500000行都将使用唯一的随机值进行更新 该表称为messages,该列称为messageid 如何做到这一点 首先,为什么是字符串?为什么不使用整数作为消息id?这将很容易

我有一个包含许多行的数据库,我想用一个4个字符的random string
0-9a-zA-Z
更新每行中的一列,但要确保该随机字符串不存在

重要的一点是,所有列都应该用唯一字符串更新,我不知道如何做到这一点,可能是在随机字符串已经存在的情况下重新创建一个新的随机字符串

因此,在最后,例如,如果数据库包含500000行,则所有500000行都将使用唯一的随机值进行更新

该表称为
messages
,该列称为
messageid


如何做到这一点

首先,为什么是字符串?为什么不使用整数作为消息id?这将很容易实现:

set @m := 0;
update messages
    set message_id = (@m := @m + 1)
    order by rand();

您可以对字符串执行类似的操作,但这样做更麻烦,使用数字也更轻松。

从问题中可以看出,您似乎想要生成一个随机字符串。
基本上要实现这一点,您需要使用rand()函数。
您可以使用它来实现随机字符串

select conv(floor(rand() * 9999), 20, 36) ;
select SUBSTRING(MD5(RAND()) FROM 1 FOR 4);
要应用于您的表

update messages
    set message_id = (select conv(floor(rand() * 9999), 20, 36));
or



update messages
        set message_id = (select SUBSTRING(MD5(RAND()) FROM 1 FOR 4));

Nice+1请注意,此查询将在启用了
SQL\u SAFE\u更新的MySQL服务器上导致错误,因为此查询中没有使用WHERE子句。