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 --被删除的表 改回
以上得知:任何创建快照之后的修改数据都将被改回!
11、SQL Server 视图、数据库快照的更多相关文章
- 关于SQL Server 镜像数据库快照的创建及使用
从SQL Server 2005 SP 起,SQL 开始支持数据库镜像.它的设计目的是试图为SQL Server 提供一个具有实时性数据同步的灾难恢复技术,即能够提供数据冗余备份,切换起来比较方便.每 ...
- SQL Server 从数据库快照还原数据库
语法: restore database db_name from database_snapshot = 'db_snapshot_name'; ------------------------- ...
- SQL Server 创建数据库快照
创建数据库快照: 必须在create database 命令中包括源数据库的每一个数据文件,原始逻辑名,新物理名与路径, 不能指定其他属性 create database db_snapshot_na ...
- Sql Server 2008R2 数据库发布与订阅
背景描述: 发布服务器A: (远程端) , 数据库服务名: GUANWANG1 订阅服务器B: (本机) , 数据库服务名: PC-LLRDBA 需要从服务器A中数据库发布,然后在B中订阅A发布 ...
- 通过 SQL Server 视图访问另一个数据库服务器表的方法
今天项目经理跑过来对我大吼大叫说什么之前安排让我做一大堆接口为什么没做,我直接火了,之前明明没有这个事情…… 不过事情还要解决,好在两个项目都是用的sqlserver,可以通过跨数据库视图来快速解决问 ...
- SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)
SQL SERVER 基于数据库镜像的主从同步 Author:chaoqun.guo createtime:2019-03-26 目录 SQL SERVER 基于数据库镜像的主从同步... 1 ...
- SQL Server 2012 数据库笔记
慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...
- 如何转换SQL Server 2008数据库到SQL Server 2005
背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...
- 通过SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...
随机推荐
- JSP HTML区别
1.最简单的区别就是,HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开2.定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servlet.3.他们的表头 ...
- IFrame中Session丢失的解决办法
1.打开IIS管理器 inetmgr2.选择被嵌入iframe源站点或者目录,右键点击打开属性框3.切换到HTTP头4.添加5.自定义HTTP头名: P3P6.自定义HTTP头值: CP=" ...
- java 对象序列化 RMI
对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在内存中.JVM停止之后,这些状态就丢失了.在很多情况下,对象的内部状态是需要被持久化下来的.提到持久化,最直接的做法是保存到文件系统或是数 ...
- TOP命令解析
转自: http://www.cnblogs.com/yjf512/ 你不一定懂的cpu显示信息 2013-10-23 11:48 by 轩脉刃, 1688 阅读, 0 评论, 收藏, 编辑 在使用t ...
- UpdateLayeredWindow是炫效果的关键
自绘——是的,输入框每个字都自己绘制,计算行宽,行高,模拟光标闪烁,处理输入法的各种事件,以及选中,拖动等功能. 支持支持一下,实际上无句柄的,就是多行富文本编辑比较麻烦,其他的,都不复杂.很容易实现 ...
- RC隔离 更新where条件列 没有索引的情况
CREATE TABLE `test100` ( `sn` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增编号', `phoneNo` int(11) , `c ...
- 【转】android JNI
原文网址:http://jinguo.iteye.com/blog/696185 Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码 ...
- wpa_supplicant使用笔记-wpa_cli iwconfig
还在搞8634,看不到头了..唉.wireless_tools的缺点是不支持WPA认证,所以有必要把wpa_supplicant也移植过来.无线 网卡是基于zydas芯片的,正好可以在网上搜到wpa_ ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- delphi record 内存怎么释放
delphi record 内存怎么释放 是不需要释放的,除非你使用指针方式生成的.