2017-12-19 10 views
1

INTO REPLACE:HSQLDB:から

HyperSQLデータベースエンジン2.4.0

Chapter 12. Compatibility With Other DBMS HyperSQLユーザガイド:

HyperSQLをサポートし、INSERTがREPLACE、無視して DUPLICATE ON平行移動さINSERTのKEY UPDATEバリエーションは、予測可能な操作とエラーのない操作 に変換されます。

INSERT IGNOREを使用すると、挿入された行のいずれかが PRIMARY KEYまたはUNIQUE制約に違反すると、その行は挿入されません。残りの の行は、長い文字列または型の不一致として などの違反がない場合にのみ挿入されます。そうでない場合は、適切なエラーが返されます。 が返されます。

REPLACEまたはON DUPLICATE KEY UPDATEを使用すると、 が必要な行が指定された値で更新されます。これは正確にそれらの行のUPDATEステートメントのように を動作します。参照 制約およびその他の整合性チェックが強制され、更新 トリガーがアクティブになります。返される行数は、単純に、挿入されて更新された合計行数である です。私は

REPLACE INTO my_table (my_id, my_int) VALUES (1, 2); 

をしようとすると、それはなぜ

は、しかし、私は

unexpected token: REPLACE required: INSERT 

を取得しますか?

答えて

2

REPLACEのようなMySQL固有のコマンドを動作させるには、MySQL互換モードを有効にする必要があることをお勧めします。 HSQL documentationの第7章から:MySQLの構文の互換モードで

、HyperSQLはINSERTは、IGNORE REPLACEおよびINSERT文のDUPLICATE KEY UPDATEの変化に対応しています。

ここで重要なポイントは、MySQL構文互換モードを有効にする必要があることです。あなたは、あなたの質問に掲載link to Chapter 12次のよう我々は見つける:

TRUE使用のSET DATABASE SQL構文MYSまたは同等のURLプロパティsql.syntax_mysを= AUTO_INCREMENTとTEXTデータ型と他のいくつかのタイプのサポートを有効にする場合はtrue。これらの型定義は、同等のHyperSQLに変換されます。

したがって、ドキュメントでは、MySQL互換モードを有効にする2つの方法が提供されています。我々はHSQLコンソールから直接実行することができますワン:あなたはMySQLを持っていたら

sql.syntax_mys=true 

SET DATABASE SQL SYNTAX MYS TRUE 

他のは、おそらく1は、開発目的のために使用するために、接続文字列に以下を追加することです互換モード有効、REPLACEはエラーなしで動作するはずです。

+0

あなたは正しいです。私はこの段落を見落としました。ありがとうございました。 – rapt

関連する問題