mysql不被人知的秘密(2)
#2.explain select * from student where name=‘lwy’;
执行结果如下:
通过比较,我们发现,第二个的possible-key和key等都为空,而且Extra显示查询用where子句没有用索引。
我们关注一下rows信息,如果用where子句,则查询行数为2,如果使用索引,则查询行数为1(这张表只有2条记录,可以想象如果记录为上万条,用索引真的很快)
所以,通过实实验证明了我们(2)的说法。
三:权限管理
mysql中的权限分配是按照user表,db表,tables_priv表,columns_priv表的顺序进行分配的。数据库系统中,
先判断user表中的值是否是Y,如果是Y则就不需要检查下面的表了。如果user表的为N,则依次检查db表,tables_priv表,和columns_priv表。
简单的说,就是user表存储的是对所有数据库的权限,db表存储的是对某一数据库的权限,tables_privs存储的是对数据库表的权限,columns_privs存储的是表中列的权限。
比如我们新建一用户:
#1.create user 'test1' identified by 'admin'; //注意:用户名和密码要交引号,为什么->>字符串
注意下面的:create user 'test2'@localhost identified by 'admin';
这两句有什么区别呢?
有localhost标识的代表该用户只能在本地连接mysql数据库,而不能通过远程连接。不带localhsot的可以通过远程连接mysql数据库。
显著的区别就是在user表的Host字段一个是localhost一个是%
这时我们用test1用户连接mysql,发现成功连接,用命令show databases 发现只有information_schema这个数据库,为什么会有这个数据库呢??
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,
如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。在MySQL中,
把information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。
如数据库名,数据库的表,表栏的数据类型与访问权限等。在information_schema中,有数个只读表。它们实际上是视图,而不是基本表,
因此,你将无法看到与之相关的任何文件。
我们用root用户查看一下发现在user表中的权限全是N,也就是说什么都做不了。
这时给用户授予权限:grant seelct ,update on *.* to test1;
## *.*:第一个*代表数据库,第二个*代表表,所以*.*就是所有数据库的所有表。
这时会发现user表的select_priv和update_priv字段的值变为了Y。
这时再用test1用户连接mysql数据库,show database ,发现所有的数据库都可以查看和更新了。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>