相关疑难解决方法(0)

CREATE FUNCTION错误"此函数没有DETERMINISTIC,NO SQL或READS SQL DATA"

我们的数据库具有生成订单号的功能.它从"设置"表中读取值,递增它,然后返回新值.例如:

CREATE FUNCTION NextOrderNumber() RETURNS INTEGER UNSIGNED NOT DETERMINISTIC
BEGIN
  DECLARE number INTEGER UNSIGNED;
  UPDATE Settings SET IntegerValue=LAST_INSERT_ID(IntegerValue+1) WHERE KeyName='NextOrderNumber';
  SET number=LAST_INSERT_ID();
  return number;
END
Run Code Online (Sandbox Code Playgroud)

注意:不要批评这个功能我知道它有缺陷只是为了说明.

我们使用这个函数如下:

INSERT INTO Orders(OrderNumber, ...)
SELECT NextOrderNumber(), ...
Run Code Online (Sandbox Code Playgroud)

启用二进制日志记录时,CREATE FUNCTION会出现此错误:

此函数在其声明中没有DETERMINISTIC,NO SQL或READS SQL DATA,并且启用了二进制日志记录(您可能希望使用安全性较低的log_bin_trust_function_creators变量)

无论binlog_format设置了什么,上述功能是否真的存在问题?根据我对相关MySQL页面的阅读,我看不出任何理由为什么这个函数与复制不兼容,无论是ROW还是STATEMENT级二进制日志记录.

如果函数是安全的,设置全局log_bin_trust_function_creators = 1会让我感到不安.我不想为所有功能禁用此检查,只需这一项.我可以改为将该函数标记为NO SQL以禁止警告吗?我尝试了它,它的工作原理.这会导致任何问题吗?

mysql stored-functions

15
推荐指数
3
解决办法
3万
查看次数

mysql_insert_id 或类似返回最后一个 mysql UUID()

你如何返回最后生成的 UUID() (主键) - 是否有类似 mysql_insert_id 的东西?

uuidtable

主键:uuid uuid()
id_u(索引):整数

多个 id_u 与一个主键 uuid() 匹配

插入: insert into uuidtable (uuid,id_u) values (uuid(),id)

其中 id 是一个数字,当然,uuid 被转义

 uuid 

mysql uuid

5
推荐指数
1
解决办法
4129
查看次数

标签 统计

mysql ×2

stored-functions ×1

uuid ×1