解析SQL Server 视图、数据库快照

 更新时间:2015年08月14日 11:48:17   投稿:mrr  
在程序开发过程中,任何一个项目都离不开数据库,这篇文章给大家详细介绍SQL Server 视图、数据库快照相关内容,需要的朋友可以参考下

简介数据库快照

      数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。

什么是快照

    数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。利用快照,可以提供如下好处:

    提供了一个静态的视图来为报表提供服务

    可以利用数据库快照来恢复数据库,相比备份恢复来说,这个速度会大大提高(在下面我会解释为什么)

    和数据库镜像结合使用,提供读写分离

    作为测试环境或数据变更前的备份,比如我要大批导入或删除数据前,或是将数据提供给测试人员进行测试前,做一个快照,如果出现问题,则可以利用快照恢复到快照建立时的状态

SQL Server 视图

什么是视图?

视图是一个虚拟的表,内容源于查询的结果集。只有当视图上建立了索引后,才会具体化。

视图可以筛选和处理数据,而不是直接访问基础表。如:创建一个视图,只展示源表中的几列数据,无需授予用户访问基础表的权限,取而代之的是授予视图访问权限。

为什么用视图?

1、如果是比较复杂的多表联查,可以将这些复杂的语句放在视图中完成,而我们只需要使用简单的语句查询视图即可。

2、保护基础表,敏感列无法被检索出。

3、对视图添加索引,可以提高效率。

创建视图

1、可以使用SSMS工具创建, 视图->新建视图->选表 选列 ->输入名字保存即可。

2、使用T-SQL创建

if exists(select * from sysobjects where name = 'newView') --如果存在删除
  drop view newView
go
create view newView --创建视图
as
select 学号=id,姓名=name,年龄=age from student
go
select * from newView

关于order by

if exists(select * from sysobjects where name = 'newView') --如果存在删除
  drop view newView
go
create view newView --创建视图
as
select top 10 学号=id,姓名=name,年龄=age from student
order by id desc --如果使用order关键字 则必须指定top
go
select * from newView

修改视图

alter view newView
as
select top 20 * from student
order by id desc --如果使用order关键字 则必须指定top
go

更新架构

--刚刚修改的视图用的是 * 查询的是全部列
--此时修改基础表架构
alter table student add mail varchar(20)

--这时源表已经更新架构,但是视图并没有改变 需要调用系统存储过程更新一下
EXEC sp_refreshview studentView
--这时 新的列才会被加进来

更新视图

对视图进行增、删、改操作,其实就是修改源表。但是由于诸多限制(如由多表联查出的视图,只检索出个别字段,但是插入的时候有些源表上的值是非空的就会出问题),一般不修改视图。

所以更新源表即可更新视图。

数据库快照

数据库快照是某一时间点的源数据库的只读静态视图,可以用来恢复数据库。

使用数据库快照必须与源数据库在相同的服务器实例,并且不能对源数据库进行删除、分离、或还原操作。

使用数据库快照

--源表中数据
use webDB
go
select * from student

if exists(select * from sys.databases where name = 'webDB_DBSS')
drop database webDB_DBSS --存在则删除
go
create database webDB_DBSS --创建数据库快照
on
(
  name = webDB,
  filename='d:\webDB_DBSS.ss' --注意后缀.ss
) --如果有多个文件需要一一指出
as snapshot of webDB
go

--修改源数据库数据
use webDB
go
update student set name='伟大' where id = 10 

--查询源数据库数据
select * from student where id = 10 

--查询快照数据
use webDB_DBSS
go
select * from student where id = 10 

 

修改源数据库,快照数据库并未发生改变。

--修改student表架构
alter table webDB.dbo.student add [address] varchar(20)
select * from webDB.dbo.student

--快照中依然没有
select * from webDB_DBSS.dbo.student 

--删除源数据库student表
drop table webDB.dbo.newTable 

--查询数据库快照该表 依然存在
select * from webDB_DBSS.dbo.newTable

从快照恢复数据到快照创建时刻

restore database webDB
from database_snapshot='webDB_DBSS'
go

select * from webDB.dbo.student --修改的值被改回

select * from webDb.dbo.newTable --被删除的表 改回

以上得知:任何创建快照之后的修改数据都将被改回!

相关文章

  • mysql 8.0.20 安装配置方法图文教程

    mysql 8.0.20 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.20 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • mysql group_concat()函数用法总结

    mysql group_concat()函数用法总结

    这篇文章主要介绍了mysql group_concat()函数用法,结合实例形式较为详细的group_concat()函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2016-06-06
  • MySQL使用游标批量处理进行表操作

    MySQL使用游标批量处理进行表操作

    这篇文章主要介绍了MySQL使用游标批量进行表操作,包括批量添加索引、批量添加字段等,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • MySQL Index Condition Pushdown(ICP)性能优化方法实例

    MySQL Index Condition Pushdown(ICP)性能优化方法实例

    这篇文章主要介绍了MySQL Index Condition Pushdown(ICP)性能优化方法实例,本文讲解了概念介绍、原理、实践案例、案例分析、ICP的使用限制等内容,需要的朋友可以参考下
    2015-05-05
  • 实例测试MySQL的enum类型

    实例测试MySQL的enum类型

    小编给大家带来的本篇内容是关于MySQL的enum类型实例测试,通过不同的测试让大家更好的理解enum类型的用法,一起学习下。
    2017-11-11
  • Centos7 移动mysql5.7.19 数据存储位置的操作方法

    Centos7 移动mysql5.7.19 数据存储位置的操作方法

    这篇文章主要介绍了Centos7 移动mysql5.7.19 数据存储位置的实现方法,需要的朋友可以参考下
    2017-10-10
  • MySQL infobright的安装步骤

    MySQL infobright的安装步骤

    这篇文章主要介绍了MySQL infobright的安装步骤,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-04-04
  • Mysql主从复制与读写分离图文详解

    Mysql主从复制与读写分离图文详解

    这篇文章主要给大家介绍了关于Mysql主从复制与读写分离的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • mysql日志滚动

    mysql日志滚动

    日志滚动解决日志文件过大问题,比如我开启了general_log,这个日志呢是记录mysql服务器上面所运行的所有sql语句;比如我开启了mysql的慢查询
    2014-01-01
  • MySQL中json字段的操作方法

    MySQL中json字段的操作方法

    这篇文章主要介绍了MySQL中json字段的操作方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11

最新评论