sqlserver2014資料庫應用技術
《清華大學出版社》
索引
這是一個很重要的概念,我們知道資料在計算機中其實是分頁存儲的,就像是單詞存在字典中一樣
資料庫索引可以幫助我們快速定位資料在哪個存儲頁區,而不用掃描整個資料庫
索引一旦被建立就會資料庫自動管理和維護,增删改插座資料庫都會對索引做修改
索引分類:
- 聚集索引
- 非聚集索引
- 包含性列索引
- 索引視圖
- 全文索引
- xml索引
聚集索引,就是相當于排序的字典(将表中的資料完全重新排序),一個表隻有一個,所占空間相當于表中資料的120%,資料建立聚集索引,會改變資料行的存儲實體結構
非聚集索引,不改變資料行的實體存儲結構,CREATE INDEX預設建立非聚集索引,理論一個表可以有249個非聚集索引
索引和限制
設定主鍵,會自動建立PRIMARY KEY 和建立一個聚集索引
建立UNIQUE 限制會自動建立一個唯一非聚集索引
建立表的索引

使用SQL語句
CREATE INDEX IX_name_mj
ON 買家表(買家名稱)
GO
檢視索引
EXEC sp_helpindex 買家表
分析索引
檢視查詢計劃,使用的索引(優先使用聚集索引)
SET SHOWPLAN_ALL ON
GO
SELECT * FROM 買家表
GO
SET SHOWPLAN_ALL OFF
GO
顯示統計資訊,檢視所花費的磁盤io活動量
SET STATISTICS IO ON
GO
SELECT * FROM 買家表
GO
SET STATISTICS IO OFF
GO
維護索引
資料表的增删改操作會産生大量索引碎片,索引表不連續,降低索引性能,需要整理索引
檢視索引碎片SQL
DBCC SHOWCONTIG(買家表,PK_買家表)
GO
ssms檢視索引
索引碎片整理
DBCC INDEXDEFRAG(銷售管理,買家表,PK_買家表)
觸發器
觸發器是一個進階的資料限制,他是特殊的存儲過程,不能通過執行sql觸發,由增删改等事件自動觸發
sqlserver2014提供3種觸發器:
- DML觸發器,包括事後觸發器,替代觸發器,CLR運作時觸發器
- DDL觸發器,修改表結構觸發
- LOGIN觸發器,登入的時候觸發
DML觸發器
INSERT觸發器
如果員工年齡不到18歲不執行插入操作
CREATE TRIGGER Employee_Insert
ON Employee
AFTER INSERT
AS
BEGIN
--從INSERTED表擷取新插入員工的出生年月
DECLARE @birthday date
SELECT @birthday=birthday FROM inserted
--判斷新員工年齡
IF(YEAR(GETDATE())-YEAR(@birthday)<18)
BEGIN
PRINT '該員工年齡不到18歲,不能入職!'
ROLLBACK TRANSACTION --復原這個節點之前的所有操作,然後繼續執行後面的語句
END
END
驗證
INSERT Employee VALUES('小明','2012-10-10')
再驗證
INSERT Employee VALUES('小明','1912-10-10')
注意主鍵id仍然會增長,即使剛剛的操作復原了,id還是增加了1
UPDATE觸發器
防止使用者修改員工姓名name字段
CREATE TRIGGER Employee_Update
ON Employee
AFTER UPDATE
AS
BEGIN
IF(UPDATE(NAME))
BEGIN
PRINT '禁止修改員工姓名!'
ROLLBACK TRANSACTION --復原這個節點之前的所有操作,然後繼續執行後面的語句
END
END
UPDATE Employee SET NAME='XX'
資料庫的維護
備份
使用存儲過程建立備份裝置
EXEC sp_addumpdevice 'DISK','COMB','E"\DATA\COMB.BAK'
删除備份裝置
EXEC sp_dropdevice 'COMB'
使用SQL建立資料庫備份
BACKUP DATABASE 銷售管理
TO COMB
使用SQL還原資料庫
RESTORE DATABASE COMB
FROM DISK='E:/DATA/COMB.BAK'