MySQL程序随机数生成

时间:2012-05-09 21:48:44

标签: mysql stored-procedures

我正在编写我的第一个MySQL程序。我尝试生成一个随机数并使用此数字更新表中的值,但前提是它已经不存在(由于唯一约束)。我的程序如下:

create procedure generaterc()
begin
declare _rc char;
declare _id int;
set _id = 1;

while _id < ((select count(*) from patient) - 1) do
    begin
    set _rc = cast(FLOOR(1000000000 + (RAND() * 8999999999)) AS char);
    select _rc;
    if not exists(select * from patient where patient.rc = _rc) then
        update patient set rc=_rc where id=_id;
        set _id=_id+1;            
    end if;
    end;
end while;    
end

执行过程时出现此错误:数据截断:第8行的列'_rc'的数据太长。我的rc列是varchar(255),但我想这不是问题的核心。有什么建议?

非常感谢。

1 个答案:

答案 0 :(得分:0)

而不是

declare _rc char;

尝试:

declare _rc varchar(255);

目前_rc只能容纳一个字符,这不足以存储您的电话号码。

但是,对于您的用例,您可能希望查看uuid_short()函数。它会生成一个大的随机数,保证是唯一的(受某些规则约束)。这样您就可以用单个语句替换您的过程:

update patient set rc = uuid_short();