【问题标题】:What's wrong with my SQL Fiddle query?我的 SQL Fiddle 查询有什么问题?
【发布时间】:2012-06-19 18:00:52
【问题描述】:

看看 SQL fiddle 中的这个简单查询:http://sqlfiddle.com/#!2/c1eb6/1。这是一个超级简单的更新查询,为什么会产生错误?我想知道这会不会是那个网站的错误?

构建架构:

create table your_table (some_column varchar(50));

insert into your_table set some_column = '30# 11';
insert into your_table set some_column = '30# 12.00';
insert into your_table set some_column = '30# 13.5';
insert into your_table set some_column = 'abdfs';
insert into your_table set some_column = '0000000';

查询:

UPDATE your_table
SET some_column = 1;

【问题讨论】:

  • 我会猜测它在EXPLAIN EXTENDED UPDATE..etc. 上失败,因为 left 列用于构建,right似乎只有SELECT....但正如我所说,一个猜测。
  • 是的,更新在使用不同的 SQL 服务器时有效,例如:sqlfiddle.com/#!3/22362/7
  • 如果它在那里工作,它确实闻起来像是一个只有选择可用的错误。我想说:报告此问题的联系信息在the about page
  • @jeffery_the_wind 是的,给我发电子邮件(sqlfiddle dot com 的管理员)可能会更直接一些。
  • 好吧,很公平;问题已调整且未投票。

标签: mysql sqlfiddle


【解决方案1】:

为那些对我在 SQL Fiddle 上处理过的一些神秘问题感兴趣的人提供一些背景知识:

Disable explicit commits in JDBC, detect them in SQL, or put the database in a readonly state (dba.se)

基本上,我试图确保小提琴始终保持一致的状态,即使人们在玩它们。我担心的一件事是人们故意弄乱数据库,为可能正在使用它们的其他人破坏它们(这种情况以前发生过,但幸运的是不经常发生)。

我已经找到了为每个数据库平台保持清洁的方法,但有趣的是,每个平台的每个方法都完全不同。不幸的是,对于 MySQL,我不得不求助于最糟糕的选择——只允许右侧的 SELECT。这是因为有太多的方法可以编写包含隐式提交的查询,而且我发现没有办法阻止这种情况发生,除非在查询端完全拒绝。这很不幸,我意识到,但这似乎是必需的。

无论如何,这个特殊的错误是我最近对 ​​MySQL 的逻辑所做的更改造成的。现在已修复,现在报告预期的错误消息:

MySQL 的查询面板中不允许使用 DDL 和 DML 语句; 只允许 SELECT 语句。将 DDL 和 DML 放入架构中 面板。

【讨论】:

  • FWIW,错误消息“不允许 DDL 和 DML 语句......”对我来说毫无意义。 DDL? DML?谷歌搜索,似乎它们之间的那两个涵盖了 SQL 所做的一切(具体来说,SELECT 是 DML 的一部分)。幸运的是,“只允许 SELECT 语句”已经足够清楚了。不管怎样,我很高兴谷歌把我带到了这篇文章,这样我就能更好地理解发生了什么以及为什么。
  • 也许只是“不允许在只读模式下工作的任何语句......”? (而且我看到有些人使用 DML 仅表示“数据更改”语句,与 DML 中的“M”一致,将 SELECT 分隔为 DQL。)
  • 呃不能在查询面板中调用存储过程,用于复杂的查询输出。我明白为什么(程序可能会改变),但这是一个主要限制......
  • 在左侧进行所有与更改相关的查询,通过右侧查询查看所有结果。
  • 是的,我明白了。只是指出错误消息并不明显。当无法在右侧(对构造和执行复杂查询的存储过程,不是进行更改操作)进行调用(使用 MySQL)时,如何使用 SQL fiddle 是不明显。我最终意识到我必须把调用放在左边,然后是创建一个表来存储结果的语句,然后把结果放到那个表中——这样我就可以在右边查询它。这似乎是一个不得不做的解决方法。但我明白为什么。
猜你喜欢
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
相关资源
最近更新 更多