日期:2014-05-16  浏览次数:20718 次

MySQL:创建存储过程失败

    第一次使用如下代码创建存储过程,却报1307的错误:

mysql> create procedure sp_test()
    -> begin
    ->     select userid,username from newname where userid = 222;
    -> end
    -> //
ERROR 1307 (HY000): Failed to CREATE PROCEDURE sp_test

    在网上查到一个解决方法:在命令行执行mysql_upgrade命令即可。

C:\Users\qxl>mysql_upgrade
'mysql_upgrade' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

    查看MYSQL的BIN目录,未找到mysql_upgrade.exe文件。从其他的MYSQL数据库的安装目录下拷贝一个mysql_upgrade.exe放到BIN目录下:

C:\Users\qxl>mysql_upgrade
Looking for 'mysql.exe' as: D:\APMServ5.2.6\MySQL5.1\bin\mysql.exe
Looking for 'mysqlcheck.exe' as: D:\APMServ5.2.6\MySQL5.1\bin\mysqlcheck.exe
FATAL ERROR: Can't execute 'D:\APMServ5.2.6\MySQL5.1\bin\mysqlcheck.exe'
    又提示未找到mysqlcheck.exe文件,于是将此文件也一起拷贝过来:

C:\Users\qxl>mysql_upgrade
......
v9test1.v9_times                                   OK
v9test1.v9_type                                    OK
v9test1.v9_urlrule                                 OK
v9test1.v9_vote_data                               OK
v9test1.v9_vote_option                             OK
v9test1.v9_vote_subject                            OK
v9test1.v9_wap                                     OK
v9test1.v9_wap_type                                OK
v9test1.v9_workflow                                OK
Running 'mysql_fix_privilege_tables'...
OK
    然后执行创建存储过程的语句:

mysql> delimiter //
mysql> create procedure sp_test()
    -> begin
    ->     select userid,username from newname where userid=215;
    -> end
    -> //
    关于mysql_upgrade的介绍,在网上找了好久,也只找到一句话:mysql_upgrade是MySQL提供的一个指令,作用是检查MySQL中的各个表与当前版本的数据库是否匹配并尝试修复所有发现的问题。MySQL官方文档中推荐在每次升级后执行一下这个指令。

    可能数据库当前存在某些问题需要修复,所以执行mysql_upgrade命令后,存储过程创建成功!