如何使用MySQL检查数据库中是否已存在表?

时间:2012-07-06 06:36:09

标签: mysql database exists

现在我使用的是:

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");
}

这是检查数据库中是否存在表的正确方法吗?

5 个答案:

答案 0 :(得分:5)

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

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

由于已经提供了大多数选项。请看看这是否有帮助。

答案 1 :(得分:2)

使用此:

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

有时您无法访问元数据。

答案 2 :(得分:1)

如果您只想检查是否存在1,2或几个表,为什么不使用:mysql> show tables like "test1";

答案 3 :(得分:1)

您也可以使用:

SHOW TABLES LIKE "emp101_messages";

我认为它更有效率。

答案 4 :(得分:1)

这是一种正确的方法。 (只是对你的表名周围的“[]”括号感到困惑 - 这些很可能不是实际名称的一部分,所以需要删除)

此外,这是一种有效的方式:因为您为table_schematable_name提供了常量,所以您使用的是INFORMATION_SCHEMA optimizations,因为表格不是甚至开了:

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 /无论代码而言几乎都是一样的。结果是一个有效的ResultSet:

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

但是要完成这个故事:它不是一个标准的SQL语法 - 所以如果你使用的某些框架就像某些类型的ORM一样,你可能无法总是使用这种类型的查询(就像我一样)召回EJB3不会让你这样做。)

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