6

SQL フィドルでこの単純なクエリを見てみましょう: 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;
4

1 に答える 1

8

私が SQL Fiddle で扱ってきたいくつかの難解な問題に興味がある人のために、少し背景を説明します。

JDBC での明示的なコミットを無効にする、SQL でそれらを検出する、またはデータベースを読み取り専用状態にする(dba.se)

本質的に、私は、人々がフィドルで遊んでいるときでも、フィドルが常に一貫した状態に保たれるようにしようとしています。私が心配していることの 1 つは、人々が意図的にデータベースをいじり、データベースを操作している可能性のある他の人々のためにデータベースを破壊することです (これは以前にも発生しましたが、幸いなことにそうではありません)。

データベース プラットフォームごとにクリーンな状態を維持する方法を見つけましたが、興味深いことに、各方法はプラットフォームごとにまったく異なります。残念ながら、MySQL の場合、最悪のオプションに頼らなければなりませんでした。右側で SELECT のみを許可するというものです。これは、暗黙的なコミットを含むクエリを作成する方法が多すぎるためであり、クエリ側で完全に拒否する以外に、それを防ぐ方法が見つからないためです。これは非常に残念なことだと思いますが、必要なようです。

とにかく、この特定のバグは、最近 MySQL のロジックに加えた変更の結果です。これは現在修正されており、予想されるエラー メッセージが報告されるようになりました。

DDL および DML ステートメントは、MySQL のクエリ パネルでは許可されていません。SELECT ステートメントのみが許可されます。DDL と DML をスキーマ パネルに配置します。

于 2012-06-19T18:38:27.300 に答える