mysql数据库--视图的简介及使用,数据的备份与还原

视图:

视图:view,是一种有结构(有行有列)但是没结果(结构中不存在真实的数据)的虚拟表,虚拟表的结构来源不是自己定义,
而是从对应的基表中产生(视图的数据来源)。

创建视图:

基本语法:create  view  视图名字  as  select  语句; -- select语句可以是普通查询,可以是连接查询,可以是联合查询
可以是子查询。
创建单表视图:基表只有一个
创建多表视图:基表来源至少两个
-- 视图:单表+多表
create view my_v1 as select * from my_student;
create view my_v2 as select * from my_student;
create view my_v3 as select * from my_student
as s left join my_class c on s.c_id =c.id;  -- id重复
-- 多表视图
create view my_v3 as 
select s.*,c.c_name,c.room from my_student as s 
left join my_class c 
on s.c_id =c.id;  -- id重复

在这里插入图片描述

查看视图:

查看视图:查看视图的结构,视图是一张虚拟表,表的查看方式都适用于视图:show  tables  [like]/desc  视图名字
/show  create  table  视图名字;

在这里插入图片描述

视图比表还是有关键字的区别:view,查看表(视图)的创建语句的时候可以使用view关键字。
-- 查看视图创建语句
show create view my_v3\G;

在这里插入图片描述

视图一旦创建:系统会在视图对应的数据库文件夹下构建一个对应的结构文件:frm文件

在这里插入图片描述

使用视图:

使用视图主要是为了查询,将视图当做表一样查询即可。视图的执行其实本质上就是执行封装的select语句。

在这里插入图片描述

视图的修改:

视图本身不可以修改,但是视图的来源是可以修改的,修改视图:修改视图本身的来源语句(select 语句)
alter  view  视图名字  as  新的select  语句。
-- 修改视图
alter view my_v1 as 
select id,name,age,sex,height,c_id from my_student;

在这里插入图片描述

视图的删除:

drop view  视图名字;
-- 删除视图
drop view my_v4;
视图里面不存储数据,可以删除。

在这里插入图片描述

视图的意义:

1.视图可以节省SQL语句:将一条复杂的查询语句使用视图进行保存,以后可以直接对视图进行操作。
2.视图可以保证数据安全,视图操作主要是用来查询的,如果对视图结构进行删除不会影响基表(相对安全)。
3.视图往往是在大项目中使用,而且是多系统使用。可以对外提供有效的数据隐藏不想提供的数据,保证数据安全。
4.视图可以对外提供友好型,不同的视图提供不同的数据,对外好像就是专门设计的一样。
5.视图可以更好(容易)地进行权限控制。

视图数据操作:

试图的确是可以进行数据写操作的,但是有很多限制。将数据直接在视图上操作。

新增数据:

数据新增就是直接对视图进行数据新增。
1.多表视图不可以新增数据
-- 多表视图插入数据
insert into my_v3 values(null,'itcast0008','zsf','男',150,180,1,'php0326','D306');

在这里插入图片描述

2.可以向单表视图插入数据:但是视图中包含的字段必须有基表中所有不能为空的字段
-- 单表视图插入数据,视图不包含所有不允许为空的字段(学号)
insert into my_v1 values(null,'张无忌',68,'男',174,2);

在这里插入图片描述

3.视图是可以向基表插入数据的
-- 单表视图插入数据
insert into my_v5 values(2,'PHP0326','D306');

在这里插入图片描述

删除数据:

多表视图不可以删除数据

在这里插入图片描述

单表视图可以删除数据
-- 单表视图删除数据
delete from my_v2 where id = 4;

在这里插入图片描述

更新数据:

理论上无论单表还是多表视图都可以更新数据。
-- 演示单表视图更新数据
update my_v1 set c_id = 2 where id = 3;

在这里插入图片描述

多表视图更新数据

在这里插入图片描述

更新限制:with  check  option,如果视图在新增的时候限定了对某个字段有限制,那么再对视图进行数据更新的时候系统会进行
验证。要保证更新之后,数据依然可以被实体查询出来,否则不让更新。
-- 视图:age字段限制更新
-- 视图的数据来源都是age大于30岁的
-- with check option:决定通过视图更新的时候,不能将已经得到的age>30岁改为<30岁的
create view my_v4 as select * from my_student where age > 30 with check option;

-- 将视图可以查到的数据改为<30
update my_v4 set age = 29 where id = 1;

-- 可以修改可以查到的数据(>30),保证视图存在
update my_v4 set age = 36 where id = 7;

在这里插入图片描述

视图算法:

视图算法:系统对视图以及外部查询视图的select语句的一种解析方式。
视图算法分为三种:
	undefined:(未定义)默认的,不是一种实际使用算法,直接告诉系统没有定义算法,系统自身决定如何处理。
	temptable:临时表算法:系统应该先执行视图的select语句,后执行外部查询语句。
	merge:合并算法,系统应该先将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高:常态)

算法指定:在创建视图的时候。
create  algorithm  =  指定算法  view  视图名字  as  select  语句;
-- 获取所有班级中最高的一个学生
-- 指定算法创建视图
create algorithm = temptable view my_v6 as select * from my_student order by height desc;
show create view my_v6\G;
select * from my_v6 group by c_id;

在这里插入图片描述
视图算法选择:

如果视图中的select语句中会包含一个查询子句(五子句),而且很有可能顺序比外部的查询语句靠后,一定要使用算法temptable,
其他情况下不用指定默认即可。

数据备份与还原:

备份:将当前已有的数据或者记录保留,还原:将已经保留的数据恢复到对应的表中。
作用:1.防止数据丢失:被盗取,误操作
2.保留数据记录。
数据备份还原的方式有很多种:数据表备份,单表数据备份,SQL备份,增量备份。

数据表备份

不需要通过SQL来备份:直接进入到数据库文件夹复制对应的表结构以及数据文件,以后还原的时候直接将备份的内容放进去即可。
数据库备份有前提条件:根据不同的存储引擎有不同的区别。
存储引擎:mysql进行数据存储的方式主要有两种:Innodb和myisam。(免费)

在这里插入图片描述

对比一下Innodb和myiasm:数据存储方式

Innodb:只有表结构,数据全部存储在ibdata1文件中
myisam:表,结构和索引全部单独分开存储

在这里插入图片描述

这种文件备份适合myisam存储引擎,直接复制三个文件即可。插入数据直接复制到test表进行查看。
Innodb引擎不适用于这个方法。复制过来无效。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单表数据备份:

每次只能备份一张表,只能备份数据表结构不可以备份。通常的使用:将表中的数据进行导出到文件。
备份:从表中选出一部分数据保存到外部的文件中(outfile)
select  */字段列表  into  outfile  文件所在路径  from  数据源;    -- 前提是外部文件不存在
-- 单表数据备份
select * into outfile 'd:/server/temp/student.txt' from my_student;
备份完成之后打开的时候不能直接打开txt不然会导致编码格式混乱无法还原,我使用的是EditPlus来打开

在这里插入图片描述

高级备份:指自己制定字段和行的处理方式
select  */字段列表  into  outfile  文件所在路径  fields  字段处理  lines  行处理  from  数据源;
fields:字段处理
	enclosed  by:字段使用什么内容包裹,默认是'',空字符串
	terminated  by:字段以什么结束,默认是“\t”,tab键。
	escaped  by:特殊符号用什么方式处理,默认是“\\”,使用反斜杠转义
lines:行处理
	starting  by:每行以什么开始,默认是'',空字符串
	terminated  by:每行以什么结束,默认是“\r\n”,换行符

在这里插入图片描述

数据还原:将一个在外部保存的数据重新恢复到(如果表结构不存在,那么sorry)

load data infile  文件所在路径  into  table  表名[(字段列表)]  fields  字段处理  lines  行处理; -- 怎么备份怎么还原

在这里插入图片描述

SQL备份:

备份的是SQL语句:系统会对表以及表结构以及数据进行数据处理,变成对应的SQL语句,然后进行备份;
还原的时候只要执行SQL指令即可。(主要就是针对表结构)
备份:mysql没有提供备份指令:需要利用mysql提供的软件:mysqldump.exe
mysqldump.exe也是一种客户端需要操作服务器必须连接认证。

在这里插入图片描述

进行SQL备份
mysqldump -uroot -proot mydatabase my_student > D:/xfl/student.sql

在这里插入图片描述
打开使用SQL备份的文件之后发现全部是SQL语句:
在这里插入图片描述
整库备份:

-- 整库备份
mysqldump -uroot -proot mydatabase > D:/xfl/mydatabase.sql

在这里插入图片描述
在这里插入图片描述

SQL还原数据

方案1.使用mysql.exe客户端还原
-- 还原数据:mysql客户端还原
mysql -uroot -proot mydatabase < D:/xfl/student.sql

在这里插入图片描述
进行还原数据:

在这里插入图片描述

方案2:使用SQL指令还原
source  文件所在路径;
-- sql指令还原SQL备份
source D:/xfl/student.sql

在这里插入图片描述
在这里插入图片描述

SQL备份优缺点:

1.优点:可以备份结构
2.缺点:会浪费空间(额外的增加SQL指令)

增量备份:

不是针对数据或者SQL指令进行备份:是针对mysql服务器的日志文件进行备份。
增量备份:指定时间段开始进行备份,备份数据不会重复,而且所有的操作都会备份(针对于很大的项目)

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/83866686