§ 查询失败
本章介绍 GreatSQL 中查询失败的常见原因。
§ 查询表或字段不存在
查询表或字段不存在,通常是因为表名拼写错误。
例如,查询表 world.city
时,如果写成 SELECT * FROM world.city
,则报错:
greatsql> SELECT * FROM world.city;
ERROR 1146 (42S02): Table 'world.city' doesn't exist
1
2
2
错误码为1146
,表示表不存在。详见错误码列表 GreatSQL 常见报错错误码对照表
查询表world.city
字段Name时,如果写成SELECT names FROM world.city
,则报错:
greatsql> SELECT names FROM world.city;
ERROR 1054 (42S22): Unknown column 'names' in 'field list'
1
2
2
错误码为1054
,表示字段不存在。详见错误码列表 GreatSQL 常见报错错误码对照表
§ 解决方法
使用正确的表名或字段名。
可使用SHOW DATABASES;
命令查看当前数据库中所有库。
可使用SHOW TABLES;
命令查看当前数据库中所有表
可使用SHOW COLUMNS FROM world.city;
命令查看表world.city
的字段。
§ 权限问题
用户没有足够的权限来执行查询操作
创建一个名为user1的 GreatSQL 用户,并限制该用户只能查询world数据库下的city表
greatsql> CREATE USER 'user1'@'%' IDENTIFIED BY 'password123';
1
并使用该账户登录 GreatSQL 数据库
$ mysql -uuser1 -ppassword123
1
登录后,使用SHOW DATABASES;
命令查看当前数据库中所有库,可以看到只有world库。
greatsql> SHOW DATABASES;
+--------------------+
| DATABASES |
+--------------------+
| information_schema |
| performance_schema |
| world |
+--------------------+
3 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
若要查询 employees 库下的 employees 表则会报错:
greatsql> SELECT * FROM employees.titles LIMIT 5;
ERROR 1142 (42000): SELECT command denied to user 'user1'@'localhost' for table 'titles'
1
2
2
错误码为1142
,表示用户没有权限。详见错误码列表 GreatSQL 常见报错错误码对照表
§ 解决方法
使用root用户,向用户 user1 授予权限,使其可以查询 employees 库下的所有表。
$ mysql -uroot -p
1
向用户 user1 授予权限
greatsql> GRANT ALL ON employees.* TO 'user1'@'%';
1
扫码关注微信公众号