MySQL函数特性

MySQL函数特性,mysql,function,Mysql,Function,我想创建一个基本上返回随机字符串的函数。我不知道在这种情况下应该赋予什么特征。我也在一个使用二进制日志记录的环境中 以下是我的函数的简化版本: CREATE FUNCTION `MYRAND`() RETURNS char(10) NOT DETERMINISTIC RETURN CONCAT('rand_', FLOOR(RAND() * 10000)); 在我的环境中创建函数时出现此错误 此函数不具有确定性、无SQL或读取中的SQL数据 它的声明和二进制日志记录已启用(您可能希望使用

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

以下是我的函数的简化版本:

CREATE FUNCTION `MYRAND`() RETURNS char(10) NOT DETERMINISTIC
  RETURN CONCAT('rand_', FLOOR(RAND() * 10000));
在我的环境中创建函数时出现此错误

此函数不具有确定性、无SQL或读取中的SQL数据 它的声明和二进制日志记录已启用(您可能希望使用 不太安全的日志\u bin\u trust\u函数\u creators变量)

可能的特征:

  • 非确定性
    -由于此函数返回随机值而使用
  • 读取/修改SQL数据
    -函数不从表中读取数据
  • 无SQL
    -我正在调用其他SQL函数(RAND),因此我不确定是否应该指定此函数

如果您对启用二进制日志记录时如何正确定义此函数有任何建议,我们将不胜感激。

请使用以下代码:

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 

MySQL希望您将函数声明为确定性、无SQL或读取SQL数据

它是确定性的吗?没有-因为它是随机的

id是否读取SQL数据?否-因为没有SELECT语句

它是否修改SQL数据?否-因为您没有INSERT、UPDATE或DELETE语句

由于您的函数不涉及数据库中的任何数据,因此它是
无SQL

因此,您应该将其声明为
非确定性
无SQL

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

你真的建议声明一个应该返回随机字符串的函数作为确定性函数吗?在这个函数中,你不使用数据库中的任何数据。因此,
没有SQL
是正确的
RAND()
不是“SQL函数”。啊,感谢您的澄清!如果你想把这变成一个答案,我很乐意接受。我会继续使用
非确定性
,还是只涉及数据访问/修改?既然你知道你的函数是非确定性的,我会保留这个声明,因为它是正确的。但我不能说这有什么区别。我只是猜测,声明是用来决定结果是否可以缓存和重用的。