zoukankan      html  css  js  c++  java
  • 11、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 --被删除的表 改回
    

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

  • 相关阅读:
    51Nod 1239 欧拉函数之和
    51Nod 1244 莫比乌斯函数之和
    BZOJ 4805: 欧拉函数求和
    BZOJ 3944: Sum
    3.25阅读摘抄
    生活整洁之道
    1064. 朋友数(20)
    1063. 计算谱半径(20)
    1061. 判断题(15)
    1062. 最简分数(20)
  • 原文地址:https://www.cnblogs.com/baidawei/p/4728101.html
Copyright © 2011-2022 走看看