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

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

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

5个回答

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

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

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


2
请使用以下内容:
SHOW [FULL] TABLES [{FROM | IN} db_name]
    [LIKE 'pattern' | WHERE expr]

有时候您无法访问元数据。

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

1

您也可以使用:

SHOW TABLES LIKE "emp101_messages";

我认为这更有效率。


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将不允许您这样做)。

此外,它在服务器端很难解析,请参见:在服务器端读取SHOW语句的结果,尽管这可能不会对您造成影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接