执行存储过程报:This function has none of DETERMINISTIC, NO SQL ???

embedded/2025/2/6 7:38:28/

执行存储过程时报如下错你该怎么整?

[Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

来~ 道友,您详看便是!
这个错误信息表明你在尝试创建一个存储函数(或存储过程),但该函数没有声明为 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且二进制日志(binary logging)是启用的。MySQL 要求在启用二进制日志的情况下,存储函数必须明确声明这些属性之一,以确保函数的行为在主从复制中是可预测和安全的。

以下是这些属性的解释:

DETERMINISTIC: 表示函数对于相同的输入总是返回相同的结果。
NO SQL: 表示函数不执行任何 SQL 查询。
READS SQL DATA: 表示函数只读取数据,不修改数据。

如果你确定你的函数是安全的,并且希望在启用二进制日志的情况下创建它,你可以采取以下几种方法之一:

方法一:声明函数属性
在创建函数时,明确声明函数的属性。

sql">例如:DELIMITER //CREATE FUNCTION my_function(param INT)
RETURNS INT
DETERMINISTIC
BEGIN-- 函数体RETURN param * 2;
END //DELIMITER ;
或者:DELIMITER //CREATE FUNCTION my_function(param INT)
RETURNS INT
NO SQL
BEGIN-- 函数体RETURN param * 2;
END //DELIMITER ;

方法二:使用 log_bin_trust_function_creators 变量
你可以临时禁用对函数创建者的信任检查,但这会降低安全性。你可以在会话级别或全局级别设置该变量:

sql">SET GLOBAL log_bin_trust_function_creators = 1;
或者在会话级别:SET SESSION log_bin_trust_function_creators = 1;

方法三:修改 MySQL 配置文件

你可以在 MySQL 配置文件(通常是 my.cnf 或 my.ini)中设置该变量,以便在服务器启动时生效:

sql">[mysqld]
log_bin_trust_function_creators = 1

然后重启 MySQL 服务器。

总结
最安全和推荐的方法是明确声明函数的属性(DETERMINISTIC、NO SQL 或 READS SQL DATA),以确保函数在主从复制中的行为是可预测和安全的。如果你确定函数是安全的,并且希望临时绕过这个检查,可以使用 log_bin_trust_function_creators 变量。


http://www.ppmy.cn/embedded/144195.html

相关文章

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中,过多的开机自启动软件会严重拖慢电脑的开机速度,影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件,让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…

PDF文件打开之后不能打印,怎么解决?

正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

[并查集] UVA11987 Almost Union-Find

问题描述 有 n n n 个集合, m m m 次操作。规定第 i i i 个集合里初始只有 i i i 。 有三种操作: 输入两个元素 p p p 和 q q q ,若 p p p 和 q q q 不在一个集合中,合并两个元素的集合。输入两个元素 p p p 和 q q q …

修复docker启动失败:Failed to start Docker Application Container Engine

配置了镜像源之后,运行sudo systemctl restart docker.service失败,提示让运行systemctl status docker.service或journalctl -xeu docker.service查看详细信息。 运行后者发现有如下日志: 红色区域是我设置的一个镜像源这个日志的意思就是…

【电子通识】案例:USB Type-C USB 3.0线缆做直通连接器TX/RX反向

【电子通识】案例:连接器接线顺序评估为什么新人总是评估不到位?-CSDN博客这个文章的后续。最近在做一个工装项目,需要用到USB Type-C线缆做连接。 此前已经做好了线序规划,结果新人做成实物后发现有的USB Type-C线缆可用,有的不行。其中发现USB3.0的TX-RX信号与自己的板卡…

Spring Cloud Alibaba:一站式微服务解决方案

一、简介 Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。它集成了阿里巴巴开源的各种分布式服务技术,提供了一系列…

开发指南084-名册的实现

平台中很多应用都有类似的需求,以人力资源系统为例,需要出下面的表格: 部门 人员列表 A部门 A1,A2,A3 B部门 B1,B2,B3 ... 它的主要特点是实现分组行转列。传统的方法就是把数据取过来,一行一行拼接。随着数据库的发展…

16 设计模式之适配器模式(充电器转换案例)

一、适配器模式的定义 适配器模式(Adapter Pattern)是一种结构型设计模式,常用于解决接口不兼容的问题。适配器模式通过引入一个“适配器”类,将一个接口转化为客户端期望的另一种接口,使得原本因接口不兼容而无法交互…