mysql函数特性

juud5qan  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(333)

我想创建一个基本上返回随机字符串的函数。我不知道在这种情况下应该赋予什么特征。我也在一个使用二进制日志记录的环境中。
以下是我函数的简化版本:

CREATE FUNCTION `MYRAND`() RETURNS char(10) NOT DETERMINISTIC
  RETURN CONCAT('rand_', FLOOR(RAND() * 10000));

我在我的环境中创建函数时遇到这个错误。
此函数在其声明中没有确定性、无sql或读取sql数据,并且启用了二进制日志记录(您可能希望使用不太安全的log\u bin\u trust\u function\u creators变量)
可能的特征: NOT DETERMINISTIC -因为此函数返回随机值而使用 READS/MODIFIES SQL DATA -函数不从表中读取数据 NO SQL -我正在调用其他sql函数(rand),所以我不确定是否应该指定此函数。。。
任何关于如何在启用二进制日志记录时正确定义此函数的建议都将不胜感激。

9rygscc1

9rygscc11#

使用如下代码:

CREATE FUNCTION get_string(in_strlen int) RETURNS VARCHAR(500) DETERMINISTIC
    BEGIN 
    set @var:='';
    while(in_strlen>0) do
    set @var:=concat(@var,IFNULL(ELT(1+FLOOR(RAND() * 1000),1,2,3,4,5,6,7,8,9));
    set in_strlen:=in_strlen-1;
    end while;  
    RETURN @var;
    END
smdncfj3

smdncfj32#

mysql希望您将函数声明为deterministic、no-sql或reads-sql数据。
是确定性的吗?不-因为它是随机的。
id是否读取sql数据?否-因为没有select语句。
它是否修改sql数据?否-因为您没有insert、update或delete语句。
由于您的函数不涉及数据库中的任何数据,因此 NO SQL .
所以你应该宣布它为 NOT DETERMINISTIC 以及 NO SQL ```
CREATE FUNCTION MYRAND() RETURNS char(10) NOT DETERMINISTIC NO SQL
RETURN CONCAT('rand_', FLOOR(RAND() * 10000));

相关问题