information_schema.TABLES怎么过滤没权限的库
时间: 2024-01-22 08:18:35 浏览: 101
如果你没有权限访问某个数据库,那么在使用 `information_schema.TABLES` 查询时,该数据库的表信息将不会显示。如果你想要过滤掉没有权限访问的库,可以使用以下语句:
```
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('mysql', 'performance_schema', 'information_schema');
```
这将返回所有你有权限访问的库中的表信息,而不包括 `mysql`, `performance_schema` 和 `information_schema` 这些系统库。你也可以添加其他需要过滤的库的名称。
相关问题
SELECT table_name FROM information_schema.tables WHERE table_schema = 'sharding_schema'; 这个查不出来
这个查询语句是用于查询指定数据库(此处是 `sharding_schema`)中的所有表名的。如果执行该语句没有查出任何结果,可能有以下几种情况:
1. 数据库中没有任何表,或者该数据库不存在。
2. 当前用户没有权限查询该数据库中的表名。你可以尝试使用 `SHOW GRANTS` 命令查看当前用户的权限。
3. 数据库连接信息配置不正确,导致无法连接到指定的数据库。你可以使用 `SHOW VARIABLES LIKE 'hostname'` 命令查看当前数据库主机名是否正确,并且确保用户名和密码正确。
请确认以上情况是否符合你的实际情况,如果还有疑问可以继续提出。
SELECT SUM(SUM(table_rows)) AS total_rows FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'world';这个SQL运行不通
这个SQL语句尝试从`INFORMATION_SCHEMA.TABLES`系统表中计算名为`world`模式下的所有表的总行数。但是它存在一些问题,可能导致无法正常运行:
1. **语法错误**:`SUM(SUM(table_rows))`可能会导致混淆,因为两次使用了`SUM`函数。通常,直接对`table_rows`求和就足够了,不需要嵌套。
2. **模式名前缀**:`table_schema = 'world'`这部分表明你可能想要筛选特定数据库模式下的表,但在标准SQL中,`information_schema`通常是全局可用的,不一定需要指定模式。如果你确实想筛选某个数据库,应该提供数据库名而不是模式名。
3. **权限限制**:如果没有足够的权限访问`INFORMATION_SCHEMA.TABLES`表,也可能无法运行此查询。
正确的写法可能是去掉外部的`SUM()`,并提供完整的数据库名(如果必要),比如:
```sql
SELECT SUM(table_rows) AS total_rows
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';
```
请检查你的数据库配置和权限,以及是否需要明确指定数据库名。
阅读全文