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以及 for提供了一个常量table_name,因此您正在使用INFORMATION_SCHEMA 优化,因为该表甚至没有打开:

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 代码而言几乎相同。结果是一个有效的 ResultSet:

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

但是为了完成这个故事:它不是标准的 SQL 语法——所以如果你使用某种框架,比如某种 ORM,你可能并不总是能够处理这种类型的查询(我记得 EJB3 会不让你这样做)。

此外,在服务器端解析非常困难,请参阅:Reading results of SHOW statements, on server side,尽管这可能不是您关心的问题。

于 2012-07-06T07:12:44.330 回答