草庐IT

mysql - 无法在 MySQL 语法错误中运行查询意外

coder 2023-10-14 原文

我正在运行 Workbench 5.2.47。

我编写了一个很长的程序,其中包含基本数据检查。如果数据库中不存在记录,则将插入该记录。

过程保存没有问题,但是当我尝试运行它时 MySQL 5.5 抛出错误。

它很长,里面有很多公司敏感数据,或者我会在这里发布。

我正在尝试通过执行一小段代码来调试该过程,但我似乎无法让 Workbench 允许我尝试任何操作。

MySQL 在 5.1.5 Working with Stored Procedures 中展示了如何创建存储过程.

让我向您展示一些我正在尝试编写的非常基础的内容:

DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;

CREATE PROCEDURE my_test()
BEGIN
    SELECT * FROM Employees;
END $$

DELIMITER ;

有了这个,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;

我再次遇到错误,这次是在我的 IF 语句中。

接下来,我进入 PhpMyAdmin 尝试使用它的数据库从那里运行一些东西:

SET @Count=Count(id) FROM `tbl_object_users` WHERE `username`='jp2code';

它也告诉我我的 SQL 语法有错误。

我确实下载并安装了最新的 Workbench 6,但它没有解决问题 - 我不喜欢这个界面,所以我卸载它并返回到 Workbench 5.2。

这是怎么回事? SQL 并没有那么难,那么这些障碍是什么?

最佳答案

问题:

DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...

是 MySQL 没有将 DROP PROCEDURE 语句行末尾的分号视为语句的结尾。这是因为前一行告诉 MySQL 语句终止符不是分号。你告诉 MySQL 语句将以两个美元符号结束。所以 MySQL 正在读取 DROP PROCEDURE 行,寻找语句终止符。它读取的整个 blob 不是有效的 MySQL 语句,它会产生语法错误。

解决方法:要么将 DROP PROCEDURE 行移动到 DELIMITER $$ 行之前;或使用指定的分隔符而不是分号终止 DROP PROCEDURE 语句。


您报告的第二个问题是语法错误。这是因为 MySQL 无法将 IF 识别为有效 SQL 语句的开头。

IF 语句在 MySQL 存储程序的上下文中有效(例如,在 CREATE PROCEDURE 语句中。)

解决方法:仅在 MySQL 存储程序的上下文中使用 IF 语句。


您报告的第三个问题也是语法错误。发生这种情况是因为您没有 SET 语句的有效语法;为用户变量赋值的 SET 语句的 MySQL 语法是:

SET @uservar = expr 

MySQL 期望在等号后有一个表达式。 MySQL 期待 SQL 语句。

要将值分配给用户变量作为 SELECT 语句的结果,请在 SELECT 语句中进行分配,例如:

SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'

请注意,SELECT 语句中的赋值运算符是 :=(冒号等于),而不仅仅是 =

关于mysql - 无法在 MySQL 语法错误中运行查询意外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061585/

有关mysql - 无法在 MySQL 语法错误中运行查询意外的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  3. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  4. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  9. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  10. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

随机推荐