我可以创建 mysql 存储过程,但不能创建存储函数。
例子:
DELIMITER $$;
DROP FUNCTION IF EXISTS `interkm_db1`.`temp`$$
CREATE FUNCTION `interkm_db1`.`temp` ()
RETURNS int
BEGIN
return 1;
END$$
DELIMITER ;$$
错误代码:1418 此函数的声明中没有 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且启用了二进制日志记录(您可能想要使用不太安全的 log_bin_trust_function_creators 变量)
当我使用 DETERMINISTIC 语句时,它仍然抱怨它没有 SUPER 权限。
这是 ISP 托管的 mysql 安装。
SHOW VARIABLES LIKE "%version%";
protocol_version 10
version 5.1.61-0+squeeze1-log
version_comment (Debian)
version_compile_machine i486
version_compile_os debian-linux-gnu
更多细节我只对我的数据库拥有所有权限
授予所有权限interkm_db1
。* 至'interkm_1'@'%' 授予使用权。授予“interkm_1”@“%”密码“-------”的所有权限interkm_db1
。* 授予“interkm_1”@“%”的所有权限
答案1
参考来源:http://dev.mysql.com/doc/refman/5.1/en/stored-programs-logging.html
要创建或修改存储函数,除了通常需要的 CREATE ROUTINE 或 ALTER ROUTINE 权限外,还必须具有 SUPER 权限。(根据函数定义中的 DEFINER 值,无论是否启用二进制日志记录,都可能需要 SUPER。请参见第 13.1.9 节“CREATE PROCEDURE 和 CREATE FUNCTION 语法”。)
由于这是共享安装(ISP 托管),因此你不太可能获得极好的权限。这允许很大程度的全系统控制。
除此之外,您还必须包含上述 3 件事之一,以便 binlogging/复制系统知道如何处理您的功能(如果您有使用它的权限)。
答案2
通过重建数据库解决!
我猜这可能是一个标准解决方案,但是当它发生在我身上时我几乎感到恐慌。
对于那些遇到类似问题的人来说。
尝试重新创建您的数据库。
至于它为什么会坏掉,我还是不知道