MySQL如何查询某个表是否存在
常用的方法如下:
-
SHOW TABLES LIKE '%tb_bp_d_case%';
-
select
TABLE_NAME
fromINFORMATION_SCHEMA
.TABLES
whereTABLE_SCHEMA
='dbname' andTABLE_NAME
='tablename' ;
需要考虑的是权限问题
mysql 的授权分为 5 层:全局层级,数据库层级,表层级,列层级,子程序层级;
SHOW TABLES,并不在priv_type列表中,也就是说只要能连接到mysql上都可以执行。
如果用户权限是 表层级或者是列层级 的,那么 show tables; 只能看到有权限的表名。
如果 查询 INFORMATION_SCHEMA 库的话,也是一样的,只能查询到有权限的表。
如果说一个用户的权限不是数据库层级以上的话就会导致结果不可信赖。
类似下边的授权就不用担心这个问题(priv_type随便什么都行):
grant priv_type on dbName.* to ..... --数据库层级
--or
grant priv_type on *.* to ..... --全局层级
==============================
如果上边写的没看明白,那么继续看下边一个例子:
如:数据库有 test1,test2 ,...
test1 库中有表,abc ,ab ,abb, a 四个表
授权语句:
grant insert on test1.a to user1@"%"Identifiedby"user1"
当用 user1 连接后,选择 test1 数据库后执行:
show tables; -- 结果只要 a 一个表。同样的 show tables like "a%"; --结果也只有表 a
select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='test1';--结果也是只要一个表a