欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年08月14日 11:48:17   投稿:mrr  
在程序開發(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)建

if exists(select * from sysobjects where name = 'newView') --如果存在刪除
  drop view newView
go
create view newView --創(chuàng)建視圖
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 --創(chuàng)建視圖
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)

--這時源表已經更新架構,但是視圖并沒有改變 需要調用系統(tǒng)存儲過程更新一下
EXEC sp_refreshview studentView
--這時 新的列才會被加進來

更新視圖

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

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

數據庫快照

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

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

使用數據庫快照

--源表中數據
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 --創(chuàng)建數據庫快照
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 

 

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

--修改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

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

restore database webDB
from database_snapshot='webDB_DBSS'
go

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

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

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

相關文章

  • mysql?sum(if())和count(if())的用法說明

    mysql?sum(if())和count(if())的用法說明

    這篇文章主要介紹了mysql?sum(if())和count(if())的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Windows下MySQL主從復制的配置方法

    Windows下MySQL主從復制的配置方法

    MySQL主從復制允許將來自一個數據庫(主數據庫)的數據復制到一個或多個數據庫(從數據庫),主數據庫一般是實時的業(yè)務數據寫入和更新操作,從數據庫常用的讀取為主
    2020-04-04
  • MySQL中的批量修改、插入操作數據庫

    MySQL中的批量修改、插入操作數據庫

    在平常的項目中,我們會需要批量操作數據庫的時候,例如:批量修改,批量插入,那我們不應該使用 for 循環(huán)去操作數據庫,這樣會導致我們反復與數據庫發(fā)生連接和斷開連接,影響性能和增加操作時間,所以可以使用SQL 批量修改的方式去操作數據庫,感興趣的朋友一起學習下吧
    2023-09-09
  • mysql的數據壓縮性能對比詳情

    mysql的數據壓縮性能對比詳情

    這篇文章主要介紹了mysql的數據壓縮性能對比,今天對這兩種方式分別進行了測試,對比了二者在磁盤占用以及查詢性能方面各自的優(yōu)劣,下面我們大家一起進入文章了解詳細內容,需要的朋友也可以參考一下
    2021-11-11
  • MySQL預編譯功能詳解

    MySQL預編譯功能詳解

    這篇文章主要為大家詳細介紹了MySQL預編譯功能的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • MySQL中字符串索引對update的影響分析

    MySQL中字符串索引對update的影響分析

    這篇文章主要介紹了MySQL中字符串索引對update的影響,結合實例形式分析了添加索引操作對于update語句的性能所造成的影響,需要的朋友可以參考下
    2016-04-04
  • MySQL全面瓦解之查詢的過濾條件詳解

    MySQL全面瓦解之查詢的過濾條件詳解

    這篇文章主要給打大家介紹了關于MySQL全面瓦解之查詢的過濾條件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • MySQL InnoDB row_id邊界溢出驗證的方法步驟

    MySQL InnoDB row_id邊界溢出驗證的方法步驟

    這篇文章主要給大家介紹了關于MySQL InnoDB row_id邊界溢出驗證的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用MySQL InnoDB具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-10-10
  • MySql 5.5.29綠色安裝教程詳解

    MySql 5.5.29綠色安裝教程詳解

    本文給大家介紹mysql5.5.29綠色安裝教程,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友參考下
    2017-01-01
  • 基于mysql 5.5 設置字符集問題的詳解

    基于mysql 5.5 設置字符集問題的詳解

    本篇文章是對關于mysql 5.5設置字符集的問題進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論