MySQL 检查表是不是已经存在

Posted

技术标签:

【中文标题】MySQL 检查表是不是已经存在【英文标题】:MySQL check if table already existsMySQL 检查表是否已经存在 【发布时间】:2015-12-14 04:41:30 【问题描述】:

我的 mysql 数据库中有几个表。它们有一定的命名约定,例如。

tbl_1_alpha
tbl_1_beta
tbl_1_alpha2
tbl_2_beta
tbl_3_alpha2

现在我想检查给定的表是否已经存在于数据库中。

例如。

$name = 'tbl_1_alpha' -> 存在 $name = 'tbl_1_alpha2' -> 存在 $name = 'tbl_1_alpha3' -> 不存在

为了得到结果,我使用了以下函数

 public function exists($name)
    

        $query = "SHOW TABLES LIKE '$name%'";

        $result = $this->db->query($query);

        if ($result->num_rows() > 0) 
            return true;
        
        return false;

    

对于给定的$name = tbl_1_alpha,它返回true。但是当我删除表tbl_1_alpha 时,它仍然返回true,因为它的名称与tbl_1_alpha2 匹配。我怎样才能避免这种情况?

谁能帮我匹配确切的表名并确定它是否已经存在?

【问题讨论】:

为什么不检查全名,没有通配符,没有LIKE 这可能对你有帮助:***.com/questions/9479056/… 说真的,我怎么没看到%。谢谢@Dagon 这是一个命名约定?我很高兴我不参与其中。 How can I check if a MySQL table exists with php?的可能重复 【参考方案1】:

无需查询。运行这个

$this->db->table_exists('customer');

Table Data


示例

$query = $this->db->table_exists('customer');
$count = count($query);

if (empty($count)) 
    echo "No Table Found";

elseif ($count == 1) 
    echo "Oopzz! There is table";

elseif ($count >1) 
    echo "Ohh !! There are many tables";

【讨论】:

【参考方案2】:

您应该从查询中删除通配符。 即

$query = "SHOW TABLES LIKE '$name'";

当然,这不是必需的。

没有LIKE

如果您不想使用 LIKE 子句,这很公平,这里是没有它的查询。它根据表是否存在返回10

SELECT count((1)) as `ct`  FROM INFORMATION_SCHEMA.TABLES where table_schema ='database' and table_name='table';

还有许多其他方法已经得到解答。在这里结帐:How can I check if a MySQL table exists with PHP?

【讨论】:

哦,通配符。我觉得很愚蠢。 如果你不使用通配符,为什么还要使用 LIKE? @Dagon 如何在没有LIKE 关键字的情况下编写查询。 @Dagon 因为我认为这是最简单的方法。但我已经更新了没有 LIKE 的答案。【参考方案3】:
$check_exists = mysql_query("SHOW TABLES LIKE '$name'");
$table_exists = mysql_num_rows($check_exists) > 0;
if ($table_exists) 
    echo 'table exists';

【讨论】:

以上是关于MySQL 检查表是不是已经存在的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个值是不是已经存在以避免重复?

检查 MySQL 上是不是存在表 [重复]

检查mysql中是不是存在表

检查表是不是存在于mysql中[重复]

如何检查用户是不是存在于数据库表中?

MySQL,使用SQL检查表中是不是存在列