首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQL Server 視圖與數據庫快照深度解析

     編輯:MySQL 綜合教學

SQL Server 視圖與數據庫快照深度解析

一、視圖

什麼是視圖?

視圖是虛擬表,數據源於查詢結果集。除非建立索引視圖,否則不佔用物理存儲。

為什麼使用視圖?

  1. 簡化複雜查詢:將多表聯查、複雜邏輯封裝,應用層只需查詢視圖。
  2. 安全控制:隱藏敏感列,授予視圖權限而非基表權限。
  3. 性能優化:對視圖建立索引可加速頻繁查詢。

創建視圖

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 限制

視圖定義中使用 ORDER BY 必須配合 TOP:

CREATE VIEW newView
AS
SELECT TOP 10 學號=id, 姓名=name, 年齡=age FROM student ORDER BY id DESC;

修改視圖

ALTER VIEW newView
AS
SELECT TOP 20 * FROM student ORDER BY id DESC;

架構變更同步

基表結構變更(如新增列)後,視圖不會自動更新,需調用系統存儲過程:

ALTER TABLE student ADD mail VARCHAR(20);
EXEC sp_refreshview 'studentView';

更新視圖數據

對視圖增刪改實際操作基表,但受限較多(如多表聯查視圖不可更新),建議直接維護基表。

二、數據庫快照

概念

數據庫快照是源數據庫在某一時間點的只讀靜態視圖(SQL Server 2005+ 引入)。主要用途:

  • 報表服務(如定格年末財務數據)。
  • 快速恢復(比傳統備份恢復快得多)。
  • 鏡像配合實現讀寫分離。
  • 大批量變更/測試前的安全點。

使用限制

  • 快照與源庫必須在同一實例。
  • 源庫存在快照時不可刪除、分離、還原。

實戰演示

1. 創建快照

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;

2. 驗證快照隔離性

-- 源庫修改數據
USE webDB;
UPDATE student SET name='偉大' WHERE id = 10;
SELECT * FROM student WHERE id = 10;  -- 顯示'偉大'

-- 快照數據不變
USE webDB_DBSS;
SELECT * FROM student WHERE id = 10;  -- 仍顯示原值

3. 結構變更不影響快照

ALTER TABLE webDB.dbo.student ADD [address] VARCHAR(20);
-- 快照中無 address 列
SELECT * FROM webDB_DBSS.dbo.student;

DROP TABLE webDB.dbo.newTable;
-- 快照中表仍存在
SELECT * FROM webDB_DBSS.dbo.newTable;

4. 從快照恢復源庫

RESTORE DATABASE webDB FROM DATABASE_SNAPSHOT = 'webDB_DBSS';
-- 源庫數據、結構全部回滾到快照創建時刻

核心優勢

快照創建幾乎瞬間完成(僅建立稀疏文件指針),恢復速度極快,是高可用架構中的利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved