MySQL
视图(view)
视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含列,其数据来自对应的真实表(基表)
create view 视图名 as select语句
alter view 视图名 as select语句 --更新成新的视图
SHOW CREATE VIEW 视图名
drop view 视图名1,视图名2
-- 创建一个视图emp_view01,只能查询emp表的(empno、ename, job 和 deptno ) 信息
-- 创建视图
CREATE VIEW emp_view01
AS
SELECT empno, ename, job, deptno FROM emp;
-- 查看视图
DESC emp_view01
SELECT * FROM emp_view01;
SELECT empno, job FROM emp_view01;
-- 查看创建视图的指令
SHOW CREATE VIEW emp_view01
-- 删除视图
DROP VIEW emp_view01;
-- 视图的细节
-- 1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式: 视图名.frm)
-- 2. 视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ]
-- 修改视图 会影响到基表
UPDATE emp_view01
SET job = 'MANAGER'
WHERE empno = 7369
SELECT * FROM emp; -- 查询基表
SELECT * FROM emp_view01
-- 修改基本表, 会影响到视图
UPDATE emp
SET job = 'SALESMAN'
WHERE empno = 7369
-- 3. 视图中可以再使用视图 , 比如从emp_view01 视图中,选出empno,和ename做出新视图
DESC emp_view01
CREATE VIEW emp_view02
AS
SELECT empno, ename FROM emp_view01
SELECT * FROM emp_view02
注意
- 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式:视图名.frm)
- 视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete]
- 视图中可以再使用视图,数据仍然来自基表
- 安全。一些数据表有着重要的信息,有些字段是保密的,不能让用户直接看到。这时就可以创建一个视图,在这张视图中只保留一部分字段。这样用户就可以查询自己需要的字段,不能查看保密的字段。
- 性能。关系数据库的数据常常会分表存储,使用外键建立这些表的之间关系。这时数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据。
- 灵活。如果系统中有一张旧的表,这张表由于设计的问题,即将被废弃。然而很多应用都是基于这张表,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表。这样就可以少做很多改动,也达到了升级数据表的目的。
Mysql 管理
Mysql
中的用户,都存储在系数据库mysql
中user
表中
其中user
表的重要字段说明:
host
: 允许登录的“位置”
localhost
表示该用户只允许本机登录,也可以指定ip地址,比如:192.168.1.100
user
:用户名;authentication string
:密码,是通过mysql
的password()
函数加密之后的密码。
创建用户
create user '用户名'@'允许登录位置' identified by '密码'
创建用户,同时指定密码
删除用户
drop user '用户名'@'允许登录位置';
用户修改密码
修改自己的密码
set password = password('密码');
修改他人的密码(需要有修改用户密码权限)
set password for '用户名'@'登录位置'=password('密码');
给用户授权
grant 权限列表 on 库.对象名 to '用户名'@'登录位置'【identified by '密码'】
- 权限列表,多个权限用逗号分开
grant select on .....
grant select,delete,create on ......
grant all [privileges] on .... //表示赋予该用户在该对象上的所有权限
-
特别说明
*.*
:代表本系统中的所有数据库的所有对象(表,视图,存储过程)库.*
:表示某个数据库中的所有数据对象(表,视图,存储过程等) -
identified by
可以省略,也可以写出.(1)如果用户存在,就是同时修改该用户的密码。
(2)如果该用户不存在,就是创建该用户!
回收用户授权
revoke 权限列表 on 库.对象名 from '用户名'@'登录位置';
权限生效指令
如果权限没有生效,可以执行下面命令刷新
FLUSH PRIVILEGES;
注意
-
在创建用户的时候,如果不指定Host,则为
%
,%
表示表示所有IP都有连接权限create user XX;
-
你也可以这样指定
create user 'xxx'@'192.168.1.%'
表示xx用户在192.168.1.*
的ip可以登录mysql -
在删除用户的时候,如果 host 不是
%
,需要明确指定‘用户’@‘host值’
-- 说明 用户管理的细节
-- 在创建用户的时候,如果不指定Host, 则为% , %表示表示所有IP都有连接权限
-- create user xxx;
CREATE USER jack
SELECT `host`, `user` FROM mysql.user
-- 你也可以这样指定
-- create user 'xxx'@'192.168.1.%' 表示 xxx用户在 192.168.1.*的ip可以登录mysql
CREATE USER 'smith'@'192.168.1.%'
-- 在删除用户的时候,如果 host 不是 %, 需要明确指定 '用户'@'host值'
DROP USER jack -- 默认就是 DROP USER 'jack'@'%'
DROP USER 'smith'@'192.168.1.%'