《Mysql實例解析SQL Server 視圖、數據庫快照》要點:
本文介紹了Mysql實例解析SQL Server 視圖、數據庫快照,希望對您有用。如果有疑問,可以聯系我們。
簡介數據庫快照MYSQL必讀
????? 數據庫快照,正如其名稱所示那樣,是數據庫在某一時間點的視圖.是SQL Server在2005之后的版本引入的特性.快照的應用場景比較多,但快照設計最開始的目的是為了報表服務.比如我需要出2011的資產負債表,這需要數據保持在2011年12月31日零點時的狀態,則利用快照可以實現這一點.快照還可以和鏡像結合來達到讀寫分離的目的.下面我們來看什么是快照.MYSQL必讀
什么是快照
MYSQL必讀
??? 數據庫快照是 SQL Server 數據庫(源數據庫)的只讀靜態視圖.換句話說,快照可以理解為一個只讀的數據庫.利用快照,可以提供如下好處:MYSQL必讀
??? 提供了一個靜態的視圖來為報表提供服務MYSQL必讀
??? 可以利用數據庫快照來恢復數據庫,相比備份恢復來說,這個速度會大大提高(在下面我會解釋為什么)MYSQL必讀
??? 和數據庫鏡像結合使用,提供讀寫分離MYSQL必讀
??? 作為測試環境或數據變更前的備份,比如我要大批導入或刪除數據前,或是將數據提供給測試人員進行測試前,做一個快照,如果出現問題,則可以利用快照恢復到快照建立時的狀態MYSQL必讀
SQL Server 視圖MYSQL必讀
什么是視圖?MYSQL必讀
視圖是一個虛擬的表,內容源于查詢的結果集.只有當視圖上建立了索引后,才會具體化.MYSQL必讀
視圖可以篩選和處理數據,而不是直接訪問基礎表.如:創建一個視圖,只展示源表中的幾列數據,無需授予用戶訪問基礎表的權限,取而代之的是授予視圖訪問權限.MYSQL必讀
為什么用視圖?MYSQL必讀
1、如果是比較復雜的多表聯查,可以將這些復雜的語句放在視圖中完成,而我們只需要使用簡單的語句查詢視圖即可.MYSQL必讀
2、保護基礎表,敏感列無法被檢索出.MYSQL必讀
3、對視圖添加索引,可以提高效率.MYSQL必讀
創建視圖MYSQL必讀
1、可以使用SSMS工具創建, 視圖->新建視圖->選表 選列 ->輸入名字保存即可.MYSQL必讀
2、使用T-SQL創建MYSQL必讀
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 byMYSQL必讀
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
修改視圖MYSQL必讀
alter view newView as select top 20 * from student order by id desc --如果使用order關鍵字 則必須指定top go
更新架構MYSQL必讀
--剛剛修改的視圖用的是 * 查詢的是全部列 --此時修改基礎表架構 alter table student add mail varchar(20) --這時源表已經更新架構,但是視圖并沒有改變 需要調用系統存儲過程更新一下 EXEC sp_refreshview studentView --這時 新的列才會被加進來
更新視圖MYSQL必讀
對視圖進行增、刪、改操作,其實就是修改源表.但是由于諸多限制(如由多表聯查出的視圖,只檢索出個別字段,但是插入的時候有些源表上的值是非空的就會出問題),一般不修改視圖.MYSQL必讀
所以更新源表即可更新視圖.MYSQL必讀
數據庫快照MYSQL必讀
數據庫快照是某一時間點的源數據庫的只讀靜態視圖,可以用來恢復數據庫.MYSQL必讀
使用數據庫快照必須與源數據庫在相同的服務器實例,并且不能對源數據庫進行刪除、分離、或還原操作.MYSQL必讀
使用數據庫快照MYSQL必讀
--源表中數據 use webDB go select * from student
MYSQL必讀
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
MYSQL必讀
--修改源數據庫數據 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
?MYSQL必讀
修改源數據庫,快照數據庫并未發生改變.MYSQL必讀
--修改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
從快照恢復數據到快照創建時刻MYSQL必讀
restore database webDB from database_snapshot='webDB_DBSS' go select * from webDB.dbo.student --修改的值被改回 select * from webDb.dbo.newTable --被刪除的表 改回
以上得知:任何創建快照之后的修改數據都將被改回!MYSQL必讀