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 子句,这很公平,这里是没有它的查询。它根据表是否存在返回1
或0
。
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 检查表是不是已经存在的主要内容,如果未能解决你的问题,请参考以下文章