MySQL数据如何查询一个用户的所有下级用户?
在Mysql中显示所有用户
1.登录数据库 首先,你需要使用如下命令登录到数据库,注意,必须是root用户哦~ ## mysql -u root -p
2.查询用户表 在Mysql中其实有一个内置且名为mysql的数据库,这个数据库中存储的是Mysql的一些数据,比如用户、权限信息、存储过程等,所以呢,我们可以通过如下简单的查询语句来显示所有的用户呢。
SELECT User, Host, Password FROM mysql.user;mysql两表关系查询?
我来讲一下这个问题吧:
对于这条sql语句它的执行计划其实并不是先查询出b表的所有id,然后再与a表的id进行比较。
mysql会把in子查询转换成exists相关子查询,所以它实际等同于这条sql语句:select * from a where exists(select * from b where b.id=a.id );
而exists相关子查询的执行原理是: 循环取出a表的每一条记录与b表进行比较,比较的条件是a.id=b.id . 看a表的每条记录的id是否在b表存在,如果存在就行返回a表的这条记录。
exists查询有什么弊端?
由exists执行原理可知,a表(外表)使用不了索引,必须全表扫描,因为是拿a表的数据到b表查。而且必须得使用a表的数据到b表中查(外表到里表中),顺序是固定死的。
如何优化?
建索引。但是由上面分析可知,要建索引只能在b表的id字段建,不能在a表的id上,mysql利用不上。
这样优化够了吗?还差一些。
由于exists查询它的执行计划只能拿着a表的数据到b表查(外表到里表中),虽然可以在b表的id字段建索引来提高查询效率。
但是并不能反过来拿着b表的数据到a表查,exists子查询的查询顺序是固定死的。
为什么要反过来?
因为首先可以肯定的是反过来的结果也是一样的。这样就又引出了一个更细致的疑问:在双方两个表的id字段上都建有索引时,到底是a表查b表的效率高,还是b表查a表的效率高?
mysql对象权限分为哪三个级别?
Mysql的权限共分为5个级别,分别是
1.Global level
Global Level的权限控制又称为全局权限控制,所有权限信息都保存在mysql.user表中。
2.Database level
Database level是在global level之下,其他三个level之上的级别,其作用域即为指定整个数据库中的所有对象。
3.Table level
Table level权限是database level之下的级别,它会被global level和database level覆盖,但它同样也有能力覆盖下面的两个级别。
4.Column level
Column level仅仅是对某个表的指定的列设置权限。它同样可以被其上的级别覆盖,但不会覆盖其下的routine level级别,因为它与routine level没有权限重合。
5.Routine level
Routine level权限只有execute和alter routine两种,主要针对procedure和function。
还没有评论,来说两句吧...