4

今私は次のようなものを使用しています:

dbResult = dbStatement.executeQuery("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '[e2]' AND table_name = '[emp101_messages]'");
while(dbResult.next())
{
    int value = -1;
    value= dbResult.getInt(1);
    System.out.println(value + " table count");
}

これは、データベースにテーブルが存在するかどうかを確認する正しい方法ですか?

4

5 に答える 5

5
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'dbname'
  AND table_name = 'my_tablename';

+----------------------+
| table_name           |
+----------------------+
| my_tablename |
+----------------------+

ほとんどのオプションはすでに提供されているためです。これが役立つかどうかを確認してください。

于 2012-07-06T07:22:20.227 に答える
2

これを使って:

SHOW [FULL] TABLES [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]

メタデータにアクセスできない場合もあります。

于 2012-07-06T06:39:30.303 に答える
1

1、2、またはそれ以上のテーブルが存在するかどうかを確認したい場合は、次を使用しないでくださいmysql> show tables like "test1";

于 2012-07-06T06:41:11.113 に答える
1

以下も使用できます。

SHOW TABLES LIKE "emp101_messages";

より効率的だと思います。

于 2012-07-06T06:41:47.540 に答える
1

そうするのが正しい方法です。(テーブル名を囲む "[]" 中かっこに困惑しています。これらはおそらく実際の名前の一部ではないため、削除する必要があります)

さらに、これは効率的な方法です。 と の両方に定数を提供しているtable_schemaため、テーブルが開かれていないという点で、INFORMATION_SCHEMA の最適化table_nameを利用しています。

explain select count(*) from information_schema.tables where table_schema='world' and table_name='City';
+----+-------------+--------+------+---------------+-------------------------+---------+------+------+---------------------------------------------------+
| id | select_type | table  | type | possible_keys | key                     | key_len | ref  | rows | Extra                                             |
+----+-------------+--------+------+---------------+-------------------------+---------+------+------+---------------------------------------------------+
|  1 | SIMPLE      | tables | ALL  | NULL          | TABLE_SCHEMA,TABLE_NAME | NULL    | NULL | NULL | Using where; Skip_open_table; Scanned 0 databases |
+----+-------------+--------+------+---------------+-------------------------+---------+------+------+---------------------------------------------------+

提供される「SHOW TABLES」ソリューションも優れています。Java/Python/Whatever code に関する限り、実質的に同じです。結果は有効な ResultSet です。

SHOW TABLES FROM world LIKE 'City';
+------------------------+
| Tables_in_world (City) |
+------------------------+
| City                   |
+------------------------+

しかし、ストーリーを完成させるために: これは標準的な SQL 構文ではありません。そのため、何らかの ORM のようなフレームワークを使用している場合、このタイプのクエリを常に使用できるとは限りません (EJB3 はそうさせないでください)。

また、サーバー側で解析するのは非常に困難です。サーバー側での SHOW ステートメントの結果の読み取り を参照してください。

于 2012-07-06T07:12:44.330 に答える