MySQL:创建一个函数,但它已经存在

MySQL:创建一个函数,但它已经存在,mysql,mysql-function,Mysql,Mysql Function,MySQL服务器版本:5.1.73源代码分发 我无法创建函数,在我删除它后它仍然存在 先删除函数: 但当我再次创建它时,它仍然活着 尝试使用: 尝试从函数列表中查找它: 尝试删除它,但它不存在: 是MySQL的bug吗?如何正确删除此函数?确保从使用mydbname中选择了一个db DROP FUNCTION IF EXISTS myfunc789a; DELIMITER $$ create function myfunc789a ( theI INT ) RETURNS INT BEGIN

MySQL服务器版本:5.1.73源代码分发

我无法创建函数,在我删除它后它仍然存在

先删除函数:

但当我再次创建它时,它仍然活着

尝试使用:

尝试从函数列表中查找它:

尝试删除它,但它不存在:


是MySQL的bug吗?如何正确删除此函数?

确保从
使用mydbname中选择了一个db

DROP FUNCTION IF EXISTS myfunc789a;
DELIMITER $$
create function myfunc789a
(   theI INT
)
RETURNS INT
BEGIN
    RETURN theI*7;
END$$
DELIMITER ;

select myfunc789a(8);
分隔符仅在某些客户端工具中使用。不是phpmyadmin

avec backticks,无问题5.6 5.7:

DROP FUNCTION IF EXISTS `myfunc789a`;
DELIMITER $$
create function `myfunc789a`
(   theI INT
)
RETURNS INT
BEGIN
    RETURN theI*7;
END$$
DELIMITER ;

select `myfunc789a`(8);
:

那么,将函数名放在backticks中就不是问题了?可能典型的问题是我没有您的确切环境来测试它。我在周末不会大量使用它,尽管我试图从中得到一些答案。是的,我没有生活。这种奇怪的情况很少发生。示例的语法已经在我的服务器上使用过了,没有问题,当然之前选择了数据库。@J.H我们不是坐在那里,我们如何知道:ptry使用dbname.functionname创建函数
mysql> select xapps_f20160817('100','100','100','100','100','100','100');$$
ERROR 1305 (42000): FUNCTION xapps_db.xapps_f20160817 does not exist
mysql> show function status where name='xapps_f20160817';$$
Empty set (0.00 sec)
mysql> drop function if exists `xapps_f20160817`;$$
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;$$
+-------+------+-----------------------------------------+
| Level | Code | Message                                 |
+-------+------+-----------------------------------------+
| Note  | 1305 | FUNCTION xapps_f20160817 does not exist |
+-------+------+-----------------------------------------+
1 row in set (0.01 sec)
DROP FUNCTION IF EXISTS myfunc789a;
DELIMITER $$
create function myfunc789a
(   theI INT
)
RETURNS INT
BEGIN
    RETURN theI*7;
END$$
DELIMITER ;

select myfunc789a(8);
DROP FUNCTION IF EXISTS `myfunc789a`;
DELIMITER $$
create function `myfunc789a`
(   theI INT
)
RETURNS INT
BEGIN
    RETURN theI*7;
END$$
DELIMITER ;

select `myfunc789a`(8);