2012-06-19 25 views
4

看看SQL提琴中的這個簡單的查詢:http://sqlfiddle.com/#!2/c1eb6/1。這是一個超簡單的更新查詢,它爲什麼會產生一個錯誤?我想知道它是否會成爲該網站的錯誤?我的SQL小提琴查詢有什麼問題?

構建模式:

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; 
+0

我會_guess_它在'EXPLAIN EXTENDED UPDATE..etc.'上失敗,因爲_left_列是用於構建的,_right_似乎只是'SELECT' ....但正如我所說,猜測。 – Wrikken

+0

是的,當使用不同的SQL服務器時,更新工作,例如:http://sqlfiddle.com/#!3/22362/7 –

+0

如果它在那裏工作,它確實聞起來像它是一個錯誤,只有選擇可用對。我會說:聯繫信息報告這是在[關於頁面](http://sqlfiddle.com/about.html#contact) – Wrikken

回答

6

背景爲有志於一些我已經在SQL小提琴對付神祕的問題了一下:

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

本質上,我試圖爲即使人們在玩耍時,小提琴總是保持一致的狀態。我擔心的一件事是人們故意搞亂了數據庫,將它們打破了可能與他們合作的其他人(這種情況以前發生過,但並不幸運)。

我發現了爲每個數據庫平臺保持乾淨的方法,但有趣的是,每種平臺的每種方法都完全不同。不幸的是,對於MySQL我不得不採取最糟糕的選擇 - 只允許在右側選擇。這是因爲編寫包含隱式提交的查詢的方式太多了,而且我沒有辦法阻止查詢方面發生徹底拒絕。我意識到這很不幸,但似乎是必需的。

無論如何,這個特定的錯誤是我最近在MySQL邏輯中做出的改變的結果。它現在已經修復,現在報告了預期的錯誤信息:

DDL和DML語句不允許在MySQL的查詢面板中使用; 只允許SELECT語句。將DDL和DML放入架構 面板中。