0


【MySQL】视图特性 && 用户管理

作者:დ旧言~
座右铭:松树千年终是朽,槿花一日自为荣。

目标:了解什么是视图,我们又该如何管理用户。

毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!

专栏选自:带你玩转MySQL

望小伙伴们点赞👍收藏✨加关注哟💕💕

​​

一、前言

想必大家在学校也学习过MySQL,可能学的懵懵懂懂,这个板块我们从入门开始,从最新的安装MySQL到学习MySQL语句,一步一步开始,一切都是新的,新的板块新的开始,大家一起努力,一起进步!!!

** 二主体**

学习【MySQL】视图特性&&用户管理 咱们按照下面的图解:

2.1【MySQL】视图特性

概念:

  • 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。
  • 视图中的数据并不会单独存储在数据库中,其数据来自定义视图时查询所引用的表(基表),在每次引用视图时动态生成。
  • 由于视图和基表用的本质是同一份数据,因此对视图的修改会影响到基表,对基表的修改也会影响到视图。

2.1.1 视图的基本使用

准备测试表:

员工表(emp)中包含如下字段:

  • 雇员编号(empno)
  • 雇员姓名(ename)
  • 雇员职位(job)
  • 雇员领导编号(mgr)
  • 雇佣时间(hiredate)
  • 工资月薪(sal)
  • 奖金(comm)
  • 部门编号(deptno)

部门表(dept)中包含如下字段:

  • 部门编号(deptno)
  • 部门名称(dname)
  • 部门所在地点(loc)

2.1.1.1 创建视图

语法如下:

CREATE VIEW view_name AS SELECT ...;
创建视图时会先执行select语句,然后用查询得到的结果来创建视图

当我们查询每个员工对应的部门名称时,需要使用员工表和部门表进行多表查询,并筛选出员工的部门号等于部门的部门号的记录:

select ename, dname from emp,dept where emp.deptno=dept.deptno;

如果该查询结果会被频繁用到,那我们就可以给上述查询结果创建视图,创建完毕后通过show命令就能看到这个视图:

create view v_ename_dname as 
select ename, dname from emp,dept where emp.deptno=dept.deptno;

**并且在数据库对应的目录下,会增加一个对应的

xxx.frm

文件,但并没有与之对应的

xxx.ibd

文件,这也证明了视图和基表使用的是同一份数据:**

创建视图后就可以直接通过查询视图,来查看每个员工及其对应的部门名称了:

select * from v_ename_dname;

2.1.1.2 修改视图影响基表

通过查询员工表(emp),可以看到员工CLARK所在部门的部门号为10:

select * from emp where ename='CLARK';

查询部门表(dept),可以看到10号部门的部门名称为ACCOUNTING :

select * from dept where deptno=10;

在视图中将员工CLARK的名字改为TEST后,会看到在员工表(emp)中的员工CLARK的名字也被改为TEST:

update v_ename_dname set ename='TEST' where ename='CLARK';
select * from emp where ename='CLARK';
select * from emp where ename='TEST';

根本原因就是因为视图和基表使用的是同一份数据,将视图中员工CLARK的名字改为TEST后员工表(emp)中的员工CLARK的名字也被改为TEST。

**2.1.1.3 **修改基表影响视图

通过查询员工表(emp),可以看到员工JAMES所在部门的部门号为30:

select * from emp where ename='JAMES';

30号部门的部门名为SALES,因此查询视图时可以看到JAMES所在的部门名为SALES:

select * from v_ename_dname where ename='JAMES';

现在将员工表中,员工JAMES对应的部门号改为20:

update emp set deptno=20 where ename='JAMES';
select * from v_ename_dname where ename='JAMES';

修改后再查询视图,就会发现JAMES所在部门的部门名,变成了20号部门的部门名RESEARCH:

select * from v_ename_dname where ename='JAMES';

2.1.1.4 删除视图

删除视图的SQL如下:

drop view v_ename_dname;

且该视图在数据库目录下对应的xxx.frm文件也会被删除:

2.1.2 视图规则和限制

  • 视图与普通表一样,视图的命名也必须是唯一的,不能出现同名视图或表名。
  • 创建视图的数目无限制,但要考虑复杂查询创建为视图之后的性能影响。
  • 视图不能添加索引,也不能有关联的触发器或者默认值。
  • 视图可以提高安全性,在访问视图时必须具有足够的访问权限。
  • 创建视图时可以使用order by子句,但如果从该视图检索数据时也含有order by子句,那么该视图中的order by将被覆盖。
  • 视图可以和普通表一起使用,比如进行多表查询,内外连接等。

2.2【MySQL】用户管理


2.2.1 用户管理

概念:

如果我们只能使用root用户,root的权限非常大,这样存在安全隐患。这时,就需要使用MySQL的用户管理,可以给不同的用户分配不同的权限,让不同用户执行权限内的操作,让不同的用户看到不同的内容。

图解:

2.2.2 用户


2.2.2.1 用户信息

在MySQL看来用户信息也是数据,同样存在一张表中,存储在系统数据库mysql的user表中:

在查看用户信息时为了避免刷屏,可以只选择其中的部分字段进行显示,如下:

部分字段说明:

  • host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆。
  • user: 用户名。
  • authentication_string: 用户密码通过password函数加密后的。
  • *_priv: 用户拥有的权限。
2.2.2.2 创建用户

语法:

create user '用户名'@'登陆主机/ip' identified by '密码';

解释说明:

  • MySQL的用户管理的时候,不仅仅需要认证用户是否注册,还要认证用户登陆的主机是否注册,这两个必须同时满足,才能具备登录MySQL的能力。
  • localhost代表:本地登录,也可以写成127.0.0.1。

举个栗子:

create user 'qing'@'localhost' identified by '123456';

2.2.2.3 修改用户密码

语法:

drop user '用户名'@'主机名'

2.2.2.4 修改用户密码

自己改自己密码:

set password=password('新的密码');

root用户修改指定用户的密码:

set password for '用户名'@'主机名'=password('新的密码');

2.2.3 数据库的权限

MySQL数据库提供的权限列表:

2.2.3.1 给用户授权

给用户授权的SQL语法如下:

grant 权限列表 on 库.表名 to '用户名'@'登陆位置' [identified by '密码'];

解释说明:

  • 用户名'@'登录地址':表示给哪一个用户授权。
  • 库名.对象名:表示要授予用户哪个数据库下的哪个对象的权限。
  • 权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开。
  • IDENTIFIED BY '密码' 可选:如果用户存在,则在授予权限的同时修改该用户的密码,如果用户不存在,则创建该用户。

总结:

  • 权限列表,多个权限用逗号分开
grant select on ...  --赋予查询权限
grant select, delete, create on ....  --赋予查询,删除,创建 权限
grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
  • . : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
  • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

举个栗子:

①:

②:

③:

**2.2.3.2 **回收权限

语法:

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

举个栗子:

**回收权限的语法与授权一样,只不过将to关键字改为了from,并且没有了

IDENTIFIED BY '密码'

字段。比如下面将cjl用户在scott数据库下的所有权限回收。**

解释说明:

  • 回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。
  • 如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。

三、结束语** **

   今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

​​

标签: android adb 数据库

本文转载自: https://blog.csdn.net/AAlykk/article/details/143165936
版权归原作者 დ旧言~ 所有, 如有侵权,请联系我们删除。

“【MySQL】视图特性 && 用户管理”的评论:

还没有评论