Fork me on GitHub

动态生成表-判断表是否存在性能对比

SHOW TABLES LIKE 查询

直接使用 SHOW TABLES LIKE 'table_name' 来判断表是否存在。结果为空表示表不存在。

$tableName = 'your_table_name';
$res = Db::query("SHOW TABLES LIKE '{$tableName}'");
if (empty($res)) {
    echo "表不存在";
} else {
    echo "表已存在";
}

INFORMATION_SCHEMA 查询

查询 INFORMATION_SCHEMA.TABLES 表,该表存储了所有数据库的表信息。对于包含大量表的数据库,因为可以直接查询目标表的信息,比 SHOW TABLES LIKE 更有效。

$tableName = 'your_table_name';
$dbName = 'your_database_name';
$res = Db::query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$dbName}' AND TABLE_NAME = '{$tableName}'");
if (empty($res)) {
    echo "表不存在";
} else {
    echo "表已存在";
}

Try-Catch 捕获异常

尝试对表执行一条简单的查询,如果表不存在会抛出异常,可以通过捕获异常来判断表是否存在。

$tableName = 'your_table_name';
try {
    Db::query("SELECT 1 FROM {$tableName} LIMIT 1");
    echo "表已存在";
} catch (Exception $e) {
    echo "表不存在";
}

总结

SHOW TABLES LIKE:简单直接,适合小型数据库。
INFORMATION_SCHEMA 查询:适合包含大量表的数据库,尤其是在需要批量判断多张表的情况下。
Try-Catch:更适合在查询操作中附带判断,不适合高频使用。

posted @ 2024-11-05 10:55  秋夜雨巷  阅读(9)  评论(0编辑  收藏  举报