14

mytable指定されたテーブルが存在するかどうかだけでなく、そのスキーマが本来あるべきものと似ているかどうかもチェックする (多かれ少なかれ) 標準的な方法はありますか? 私はH2 データベースを試しています。

CREATE TABLE IF NOT EXISTS mytable (....)

ステートメントは明らかにテーブルの名前のみをチェックします。指定された名前のテーブルがあり、スキーマが異なる場合、例外が発生すると予想されます。

4

5 に答える 5

5
SELECT  *
FROM    INFORMATION_SCHEMA.TABLES
WHERE   TABLE_NAME      = 'TableName'
    AND TABLE_SCHEMA    = 'public'
于 2012-09-03T23:42:38.620 に答える
4

CREATE TABLE IF NOT EXISTS ...標準の SQL コードではありません。

やるべきことは、テーブルがすでにカタログにあるかどうかを確認することです。たとえば、Java では次のようなことができます。 connection.getMetaData().getTables(connection.getCatalog(), null, null, null)

詳細については、javadoc java.sql.Connectionを参照してください。

于 2010-03-19T12:47:13.207 に答える
3

二重の答え:

(a) テーブルの存在は、実行時にアプリケーション自体ではなく、アプリケーションのインストール手順によって保証されるべきものです。

(b) (a) から逸脱する正当な理由があると本当に思う場合は、SQL 標準の INFORMATION_SCHEMA によって多かれ少なかれ構造が規定されているテーブルで構成されるデータベースであるカタログをクエリしてみることができます。 . どのテーブルが存在するか、どの列があるか、それらの列がどのデータ型であるか、どのキーが宣言されているかなど、すべてそこにあります。

于 2010-03-19T19:32:44.973 に答える
1

この機能をネイティブに備えているデータベースを私は知りません。

それを使用したことはありません(これを行うために私自身のコードをロールバックしました)が、おそらくApacheDdlUtilsが役立つでしょう。

特に、さまざまなデータベースベンダーと連携させたい場合は、注意が必要です。また、合格するためにスキーマがどれほど類似している必要があるかについては、おそらく異なる意見があります。列名、列の順序、列の種類、主キーの定義:確かに。しかし、制約、制約の名前、テーブルスペースの定義などはどうでしょうか。

于 2010-03-19T12:44:42.177 に答える