国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

解析SQL Server 視圖、數據庫快照

2024-08-31 01:03:09
字體:
來源:轉載
供稿:網友

在程序開發(fā)過程中,任何一個項目都離不開數據庫,這篇文章給大家詳細介紹SQL Server 視圖、數據庫快照相關內容,需要的朋友可以參考下

簡介數據庫快照

數據庫快照,正如其名稱所示那樣,是數據庫在某一時間點的視圖。是SQL Server在2005之后的版本引入的特性。快照的應用場景比較多,但快照設計最開始的目的是為了報表服務。比如我需要出2011的資產負債表,這需要數據保持在2011年12月31日零點時的狀態(tài),則利用快照可以實現這一點。快照還可以和鏡像結合來達到讀寫分離的目的。下面我們來看什么是快照。

什么是快照

數據庫快照是 SQL Server 數據庫(源數據庫)的只讀靜態(tài)視圖。換句話說,快照可以理解為一個只讀的數據庫。利用快照,可以提供如下好處:

提供了一個靜態(tài)的視圖來為報表提供服務

可以利用數據庫快照來恢復數據庫,相比備份恢復來說,這個速度會大大提高(在下面我會解釋為什么)

和數據庫鏡像結合使用,提供讀寫分離

作為測試環(huán)境或數據變更前的備份,比如我要大批導入或刪除數據前,或是將數據提供給測試人員進行測試前,做一個快照,如果出現問題,則可以利用快照恢復到快照建立時的狀態(tài)

SQL Server 視圖

什么是視圖?

視圖是一個虛擬的表,內容源于查詢的結果集。只有當視圖上建立了索引后,才會具體化。

視圖可以篩選和處理數據,而不是直接訪問基礎表。如:創(chuàng)建一個視圖,只展示源表中的幾列數據,無需授予用戶訪問基礎表的權限,取而代之的是授予視圖訪問權限。

為什么用視圖?

1、如果是比較復雜的多表聯(lián)查,可以將這些復雜的語句放在視圖中完成,而我們只需要使用簡單的語句查詢視圖即可。

2、保護基礎表,敏感列無法被檢索出。

3、對視圖添加索引,可以提高效率。

創(chuàng)建視圖

1、可以使用SSMS工具創(chuàng)建, 視圖->新建視圖->選表 選列 ->輸入名字保存即可。

2、使用T-SQL創(chuàng)建

 

 
  1. if exists(select * from sysobjects where name = 'newView') --如果存在刪除 
  2. drop view newView 
  3. go 
  4. create view newView --創(chuàng)建視圖 
  5. as 
  6. select 學號=id,姓名=name,年齡=age from student 
  7. go 
  8. select * from newView 

關于order by

 

 
  1. if exists(select * from sysobjects where name = 'newView') --如果存在刪除 
  2. drop view newView 
  3. go 
  4. create view newView --創(chuàng)建視圖 
  5. as 
  6. select top 10 學號=id,姓名=name,年齡=age from student 
  7. order by id desc --如果使用order關鍵字 則必須指定top 
  8. go 
  9. select * from newView 

修改視圖

 

 
  1. alter view newView 
  2. as 
  3. select top 20 * from student 
  4. order by id desc --如果使用order關鍵字 則必須指定top 
  5. go 

更新架構

 

 
  1. --剛剛修改的視圖用的是 * 查詢的是全部列 
  2. --此時修改基礎表架構 
  3. alter table student add mail varchar(20) 
  4.  
  5. --這時源表已經更新架構,但是視圖并沒有改變 需要調用系統(tǒng)存儲過程更新一下 
  6. EXEC sp_refreshview studentView 
  7. --這時 新的列才會被加進來 

更新視圖

對視圖進行增、刪、改操作,其實就是修改源表。但是由于諸多限制(如由多表聯(lián)查出的視圖,只檢索出個別字段,但是插入的時候有些源表上的值是非空的就會出問題),一般不修改視圖。

所以更新源表即可更新視圖。

數據庫快照

數據庫快照是某一時間點的源數據庫的只讀靜態(tài)視圖,可以用來恢復數據庫。

使用數據庫快照必須與源數據庫在相同的服務器實例,并且不能對源數據庫進行刪除、分離、或還原操作。

使用數據庫快照

 

 
  1. --源表中數據 
  2. use webDB 
  3. go 
  4. select * from student 

解析SQL Server 視圖、數據庫快照

 

 
  1. if exists(select * from sys.databases where name = 'webDB_DBSS'
  2. drop database webDB_DBSS --存在則刪除 
  3. go 
  4. create database webDB_DBSS --創(chuàng)建數據庫快照 
  5. on 
  6. name = webDB, 
  7. filename='d:/webDB_DBSS.ss' --注意后綴.ss 
  8. ) --如果有多個文件需要一一指出 
  9. as snapshot of webDB 
  10. go 

解析SQL Server 視圖、數據庫快照

 

 
  1. --修改源數據庫數據 
  2. use webDB 
  3. go 
  4. update student set name='偉大' where id = 10  
  5.  
  6. --查詢源數據庫數據 
  7. select * from student where id = 10  
  8.  
  9. --查詢快照數據 
  10. use webDB_DBSS 
  11. go 
  12. select * from student where id = 10 

解析SQL Server 視圖、數據庫快照

修改源數據庫,快照數據庫并未發(fā)生改變。

 

 
  1. --修改student表架構 
  2. alter table webDB.dbo.student add [address] varchar(20) 
  3. select * from webDB.dbo.student 
  4.  
  5. --快照中依然沒有 
  6. select * from webDB_DBSS.dbo.student  
  7.  
  8. --刪除源數據庫student表 
  9. drop table webDB.dbo.newTable  
  10.  
  11. --查詢數據庫快照該表 依然存在 
  12. select * from webDB_DBSS.dbo.newTable 

從快照恢復數據到快照創(chuàng)建時刻

 

 
  1. restore database webDB 
  2. from database_snapshot='webDB_DBSS' 
  3. go 
  4.  
  5. select * from webDB.dbo.student --修改的值被改回 
  6.  
  7. select * from webDb.dbo.newTable --被刪除的表 改回 

以上得知:任何創(chuàng)建快照之后的修改數據都將被改回!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 夏津县| 方山县| 黄山市| 长春市| 新宾| 梅州市| 吉隆县| 田东县| 集贤县| 崇左市| 马关县| 霍邱县| 平舆县| 永川市| 随州市| 贵港市| 新绛县| 东港市| 崇礼县| 高要市| 呼和浩特市| 炎陵县| 普定县| 通化市| 安西县| 闽清县| 镇坪县| 朝阳市| 湖州市| 定安县| 白城市| 彭阳县| 沁源县| 华安县| 图木舒克市| 平安县| 汉中市| 集贤县| 兴国县| 泉州市| 扶余县|