MySQL-视图和MySQL管理

视图

基本介绍

1)视图是一个虚拟表,其内容由查询定义。同真实的表一样(映射关系,视图显示基表中希望显示的数据),视图包含列,其数据来自对应的真实表(基表);

2)视图和基表的关系:①视图是根据基表创建的;②视图有列,数据来自基表;③可以通过视图修改基表的数据;④基表中数据的改变,也会影响视图中显示的数据;

基本使用

-- 创建视图
CREATE VIEW 视图名 AS SELECT语句

-- 修改视图(重新定义一个视图,原来的视图被更新)
ALTER VIEW 视图名 AS SELECT语句

-- 显示创建视图的指令
SHOW CREATE VIEW 视图

-- 删除视图
DROP VIEW 视图1,视图2
#视图的使用
-- 创建视图
CREATE VIEW emp_view 
		AS
		SELECT empno,  ename, job, deptno FROM emp;
		
-- 查看视图结构
DESC emp_view;

-- 查看视图中的数据
SELECT * FROM emp_view;
SELECT empno, deptno FROM emp_view;

-- 修改视图
ALTER VIEW emp_view
		AS
		SELECT   empno, job, deptno FROM emp;
		
-- 查看创建视图的指令
SHOW CREATE VIEW emp_view;

-- 删除视图
DROP VIEW emp_view;

使用细节

1)创建视图后,到数据库查看对应视图只有一个视图结构文件(形式:视图名.frm);

2)视图的数据变化会影响到基表,基表的数据变化也会影响到视图【insert、update、delete】;

3)视图中可以再使用视图;

-- 视图的数据变化会影响到基表,
-- 基表的数据变化也会影响到视图【insert、update、delete】
CREATE VIEW emp_view
		AS
		SELECT empno,  ename, job, deptno FROM emp;

UPDATE emp_view SET job = 'MANAGER' WHERE empno = 7369;

-- 查询基表
SELECT * FROM emp; -- 基表中 7369 SMITH的job变化为MANAGERR

UPDATE emp SET job = 'SALEMAN' WHERE empno = 7369;
-- 查询视图
SELECT * FROM emp_view; -- 视图中 7369 SMITH的job变化为SALEMAN

-- 视图中还可以使用视图(同样和基表有映射关系)
CREATE VIEW emp_view01
		AS
		SELECT empno, deptno FROM emp_view;
SELECT * FROM emp_view01;

应用实例

1)安全。一些数据表有着很重要的信息,有些字段是保密的,不能够让用户直接看到。这时就需要创建一个视图,在这张是图表中只保留了一部分字段。用户可以查询自己需要的字段,但是不能查看保密的字段;

2)性能。关系数据库的数据常常会分表存储,使用外键建立这些表之间的关系。这时,数据库查询通常会用到链接(JOIN)。这要做不但繁琐,效率也相对比较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据;

3)灵活。如果系统中有一张旧的表,这张表由于涉及的问题即将被废弃。然而,很多应用都是基于这张表,不宜修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表中。在做少的改动的同时,也达到了升级数据表的目的。

测试代码

-- 三表合一
SELECT empno, ename, dname, grade
		FROM emp, dept, salgrade
		WHERE emp.`deptno` = dept.`deptno` AND
		(emp.`sal` BETWEEN salgrade.`losal` AND salgrade.`hisal`);
-- 视图映射到emp,dept,salgrade表
CREATE VIEW emp_view02
	AS
	SELECT empno, ename, dname, grade
		FROM emp, dept, salgrade
		WHERE emp.`deptno` = dept.`deptno` AND
		(emp.`sal` BETWEEN salgrade.`losal` AND salgrade.`hisal`);
DESC emp_view02;
SELECT * FROM emp_view02;

MySQL管理

MySQL用户管理

不同的数据库用户登录到DBMS后,根据相应的权限,可以操作的数据库和数据对象(表、视图、触发器)都不一样;mysql中的用户都存储在系统数据库mysql的user表中。

重要字段

1)host:允许登陆的“位置”,localhost表示该用户只允许本机登录,也可以指定ip地址;

2)user:用户名;

3)authentication_string:密码,是通过mysql的password()函数加密后的密码。

创建用户

# 创建用户的同时要指定密码
CREATE USER '用户名' @'允许登陆位置' IDENTIFIED BY '密码';

删除用户

DROP USER '用户名' @'允许登陆位置';
-- 用户管理
-- 在项目开发时,可以根据不同的开发人员,赋予相应的mysql操作权限
-- mysql数据库管理人员(root),根据需要创建不同的用户,赋予相应的权限使用

-- 创建新用户
-- 用户名:pero01;登录IP:localhost;
-- 密码:123456(存放到user表中的是加密后的)
CREATE USER 'pero01' @'localhost' IDENTIFIED BY '123456';
 -- 查询数据库用户
 SELECT * FROM 
		mysql.`user`;
		
SELECT `host`, `user`, authentication_string FROM
		mysql.`user`;
-- 删除用户		
DROP USER 'pero01' @'localhost';

-- root 修改 pero01 的密码
SET PASSWORD FOR 'pero01'@'localhost' = PASSWORD('123456');  -- 成功

修改用户密码

# 修改自己的密码
SET PASSWORD = PASSWORD('密码');

# 修改他人密码(需要有修改用户的密码权限)
SET PASSWORD FOR '用户名' @'登陆地址' = PASSWORD('密码');
-- 修改密码
SET PASSWORD = PASSWORD('abcdef');

-- pero01修改root密码
-- 报错:Access denied for user 'pero01'@'localhost' to database 'mysql'
-- set password for 'root'@'localhost' = password('123456');

MySQL权限管理

权限意义
ALL[PRIVILEGES]

设置除GRANT OPTION之外的所有简单权限

ALTER允许使用ALTER TABLE
ALTER ROUTINE更改或取消已存储的子程序
CREATE允许使用CREATE TABLE
CREATE ROUTINE

创建已存储的子程序

CREATE TEMPORARY TABLES允许使用CREATE TEMPORARY TABLE
CREATE USER允许使用CREATE USER,DROP USER,RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW允许使用CREATE VIEW

DELETE

允许使用DELETE
DROP允许使用DROP TABLE
EXECUTE允许用户运行已存储的子程序
FILE允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE
INDEX允许使用CREATE INDEX 和 DROP INDEX
INSERT允许使用INSERT
LOCK TABLES允许对拥有的SELECT权限的表使用LOCK TABLES
PROCESS允许使用SHOW FULL PROCESSLIST
REFERENCES未被实施
RELOAD允许使用FLUSH
REPLICATION CLIENT允许用户询问从属服务器或主服务器地址
REPLICATION SLAVE用于复制型从属服务器(从主服务器中读取二进制日志事件)
SELECT允许使用SELECT
SHOW DATABASESSHOW DATABASES 显示所有数据库
SHOW VIEW允许使用SHOW CREATE VIEW
SHUTDOWN

允许使用mysqladmin shutdown

SUPER允许使用CHANGE MASTER,KILL,PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许连接(一次),即使已达到了max_connections。
UPDATE允许使用UPDATE
USAGE"无权限"的同义词
GRANT OPTION允许授予权限

用户授权

#基本语法
GRANT 权限列表 on 库.对象名 to '用户名' @'登陆位置' [identifued by '密码'];

细节说明:

1)权限列表,多个权限用逗号分开

grant select on......

grant select ,delete, create on......

grant all [privileges] on......        //表示赋予该用户在该对象上的所有权限

2)特别说明

*.*:代表本系统中的所有数据库的所有对象(表,视图,存储过程);

库.*:表示某个数据库中的所有数据对象(表,视图,存储过程);

3)identified by可以省略,也可以写出;

①如果该用户存在,就是修改该用户的密码;

②如果该用户不存在,就是创建该用户。

回收用户权限

#基本语法
RECOKE 权限列表 ON 库.对象名 from '用户名' @'登陆位置';

权限生效指令

#如果权限没有生效,可以使用如下指令:
FLUSH PRIVILEGES;

测试代码

-- 创建用户 nano
CREATE USER 'nano' @'localhost' IDENTIFIED BY '123456';

-- 使用root用户创建数据库和表
CREATE DATABASE testdb;

CREATE TABLE news(
		id INT,
		`name` VARCHAR(32));

-- 在表中添加数据
INSERT INTO news VALUES (1,'北京新闻');
SELECT * FROM news;

-- 给用户nano分配查看和添加权限
GRANT SELECT , INSERT 
		ON testdb.news 
		TO 'nano' @'localhost';

-- 给用户nano分配修改和删除权限
GRANT UPDATE, DELETE
		ON testdb.`news`
		TO 'nano' @'localhost';
		
-- 修改nano的密码为pero
SET PASSWORD FOR 'nano' @'localhost' = PASSWORD('pero');

-- 回收权限
REVOKE ALL ON testdb.`news` FROM 'nano' @'localhost';

-- 删除nano
DROP USER 'nano' @'localhost';

细节说明

1)在创建用户的时候,如果不指定HOST,则为%,%号表示所有IP都有连接权限;

2)也可以这样指定

CREATE USER '用户名' @'192.168.1.%' 表示用户在192.168.1.*的ip可以登录mysql

3)在删除用户的时候,如果host不是%,需要明确指定  '用户名' @'host值'。

-- 在创建用户的时候,如果不指定HOST,则为%,%号表示所有IP都有连接权限;
CREATE USER tom;
SELECT `host`, `user` 
		FROM mysql.`user`;  -- host为%,所有IP都有连接权限

-- 创建用户
CREATE USER 'jack'@'192.168.1.%';

-- 删除用户
DROP USER tom;
DROP USER 'jack'@'192.168.1.%';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL创建视图的语法如下: ```sql CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition]; ``` 其中,view_name是视图的名称,column1、column2是视图中包含的列,table_name是视图所基于的表,condition是筛选条件。 对于学生宿舍管理系统,可以创建一个视图来显示每个宿舍的学生信息。假设有两个表,一个是学生信息表,一个是宿舍信息表,它们的结构如下: 学生信息表(student_info): - 学生学号(sid) - 学生姓名(sname) - 学生性别(sex) - 学生年龄(age) - 学生班级(class) - 学生宿舍楼id(dorm_building_id) - 学生宿舍id(dorm_id) - 学生学院信息(college) - 学生户籍(hometown) - 学生身份证号(id_card) - 学生手机号(phone) - 学生邮箱(email) - 学生专业信息(major) 宿舍信息表(dorm_info): - 宿舍号(dorm_number) - 宿舍类型(dorm_type) - 宿舍容量(dorm_capacity) 现在需要创建一个视图,显示每个宿舍的学生信息,包括宿舍id、宿舍楼id、宿舍号、宿舍类型、宿舍容量以及该宿舍内的所有学生信息。 创建视图的SQL语句如下: ```sql CREATE VIEW dorm_student_info AS SELECT dorm_info.dorm_id, dorm_info.dorm_building_id, dorm_info.dorm_number, dorm_info.dorm_type, dorm_info.dorm_capacity, student_info.sid, student_info.sname, student_info.sex, student_info.age, student_info.class, student_info.college, student_info.hometown, student_info.id_card, student_info.phone, student_info.email, student_info.major FROM dorm_info LEFT JOIN student_info ON dorm_info.dorm_id = student_info.dorm_id AND dorm_info.dorm_building_id = student_info.dorm_building_id; ``` 这个视图将宿舍信息表和学生信息表进行了左连接,以保证即使某个宿舍没有学生,也能够显示宿舍信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值