jp2*_*ode 3 mysql phpmyadmin mysql-workbench
我正在运行Workbench 5.2.47.
我用基本的数据检查编写了一个很长的程序.如果数据库中不存在记录,则将插入记录.
程序保存没有问题,但MySQL 5.5在我尝试运行时抛出错误.
它很长,并且有很多公司敏感数据,或者我会在这里发布.
我试图通过执行代码的小块来调试程序,但我似乎无法让Workbench允许我尝试的任何东西.
MySQL演示了如何在5.1.5使用存储过程中创建存储过程.
让我告诉你一些我想写的非常基本的东西:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test()
BEGIN
SELECT * FROM Employees;
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
有了它,Workbench给了我错误,"语法错误,意外的CREATE,期待$ end".

我不明白,但我需要完成一些事情,所以我继续前进.
我做了一个更简单的查询:
SET @Count=(SELECT Count(*) FROM tbl_object_users WHERE username='jp2code');
IF (@Count < 1) THEN
INSERT INTO tbl_object_users (username, date_time) VALUES ('jp2code', NOW());
END IF;
Run Code Online (Sandbox Code Playgroud)
再次,我得到一个错误,这次是在我的IF声明中.

接下来,我进入PhpMyAdmin尝试使用其数据库从那里运行一些东西:
SET @Count=Count(id) FROM `tbl_object_users` WHERE `username`='jp2code';
Run Code Online (Sandbox Code Playgroud)
它也告诉我我的SQL语法有错误.

我确实下载并安装了最新的Workbench 6,但它没有解决问题 - 我不喜欢这个界面,所以我卸载了它并回到了Workbench 5.2.
这个问题:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
Run Code Online (Sandbox Code Playgroud)
是MySQL没有在DROP PROCEDURE语句行的末尾看到分号作为语句的结尾.这是因为上一行告诉MySQL语句终止符不是分号.你告诉MySQL,声明将以两个美元符号终止.所以MySQL正在读取该DROP PROCEDURE行,寻找语句终止符.并且它读取的整个blob不是有效的MySQL语句,它会生成语法错误.
的修复:要么移动DROP PROCEDURE线之前的DELIMITER $$线; 或DROP PROCEDURE使用指定的分隔符而不是分号终止语句.
您报告的第二个问题是语法错误.之所以发生这种情况,是因为MySQL无法识别IF出有效SQL语句的开头.
该IF语句仅在MySQL存储程序的上下文中有效(例如,在CREATE PROCEDURE语句中).
修复:IF仅在MySQL存储程序的上下文中使用语句.
您报告的第三个问题也是语法错误.之所以发生这种情况,是因为您没有SET语句的有效语法; 用于SET为用户变量赋值的语句的MySQL语法是:
SET @uservar = expr
Run Code Online (Sandbox Code Playgroud)
MySQL期望在等号后面有一个表达式.MySQL 不期待SQL语句.
要将值作为SELECT语句的结果赋给用户变量,请在SELECT语句中执行赋值,例如:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Run Code Online (Sandbox Code Playgroud)
请注意,SELECT语句中的赋值运算符是:=(冒号等于),而不仅仅是=.
| 归档时间: |
|
| 查看次数: |
13657 次 |
| 最近记录: |