標籤:資料庫 儲存 事務 管理
事務概念:
事務是一種機制,它包含了一組資料庫操作命令,而且將所有的命令作為一個整體向資料庫提交或撤銷。
這組命令要麼執行,要麼都不執行,所以事務是一個不可分割的邏輯工作單元。
事務的特點:
1、原子性:事務作為一個完整性的操作,其各元素是不可分割的,要麼全部執行,要麼撤銷所有的操作,事務的單元不可能出現部分成功的情況。
2、一致性:事務完成前後,資料必須保持完全一致的狀態。即在事務開始或完成後,資料庫中儲存的資料都必須保持一致的狀態。
3、隔離性:事務是相對獨立的,在一個事務對資料進行修改時,其他的事務變不可能修改。
4、持久性: 事務完成後,其對於系統的影響是永久的。即一個事務如果提交成功,DBMS保證它對資料庫中資料的改變是永久性的,不會受任何系統故障的影響。
在T-SQL總是用下列文法來管理事務:
1、開始事務:BEGIN TRANSACTION
2、提交事物:COMMIT TRANSACTION
3、復原事務:ROLLBACK TRANSACTION
索引可分為3類:
1、唯一索引:不允許有兩行相同的索引值,所以唯一索引一般在主鍵或建立了唯一約束的列上建立。當在列上建立了唯一約束後,
將自動在此列建立一個唯一索引。
2、叢集索引:叢集索引根據資料行的鍵值在表或視圖中排列和儲存這些資料行,即表中行的物理順序與索引順序相同。每個表只能有一個
叢集索引,因為資料行本身只能按一個順序排序。如果表具有叢集索引,則該表稱為聚集表,表中的資料行按索引順序進行排序,如果
沒有叢集索引,則其資料行儲存在一個稱為堆的無序結構中。
3、非叢集索引:非叢集索引具有獨立於資料行的結構。非叢集索引包含非叢集索引鍵值,且每個鍵值都有指向包含該鍵值的資料行的指標。
使用T-SQL建立索引
文法:
CREATE [UNIQUE] [CLUSTERED|NOCLUSTERED] INDEX indexname ON tablename
(欄位名)
[WITH FILLFACTOR=x]
文法說明:UNIQUE指定建立的是唯一索引,可選項CLUSTERED、NOCLUSTERED指定是叢集索引還是非叢集索引,可選項indexname表示索引名,
索引的命名規範是“ix_表名稱_列名”。FILLFACTOR表示填滿因數,用於設定索引頁資料填充的空間百分比,即每個索引頁的剩餘空間。指定範圍是
0~100,假如取值為70%,則表示還有30%的空間供以後擴充使用。0等同於100,表示頁層級幾乎已填滿,但留出了一些空間,至少能在添加一個索引行。
樣本如下:
USE Bank
GO
if exists(select name from sysindexes where name=‘index_card_no‘)
BEGIN
drop index ALL_PURPOSE_CARD.index_card_no
END
create nonclustered index index_card_no on ALL_PURPOSE_CARD
(CARD_NO) with fillfactor=30
GO
如上樣本使用exists子查詢從系統檢視表sysindex中檢查名為index_card_no的索引是否存在。如果存在,則使用drop index語句刪除,然後再表ALL_PURPOSE_CARD的
CARD_NO列上建立非叢集索引。一般而言,建立索引後,不需要在查詢時顯示指定依據那個索引進行查詢,因為資料庫引擎會自動對查詢進行最佳化。
利用索引進行查詢:
select * from ALL_PURPOSE_CARD with(index=index_card_no) where LAST_USED_DATE between ‘2011-07-01‘and‘2012-12-30‘
若存在多個索引可以使用WITH(INDEX=索引名)顯示指定索引進行查詢
*提醒:使用索引可以加快資料檢索速度,但沒有必要為每個列都要建立索引,因為索引本身也需要維護
可以依據下列標準選擇建立索引:1、該列用於頻繁搜尋;2、該列用於對資料進行排序;3、該列中重複值少。
下面的列不適合建立索引:1、列中重複值多;2、標中資料少(為小型的表建立索引是不必要的,因為檢索索引的時間可能比檢索索引的時間還要長);3、頻繁進行
插入操作的列(因為每次新添加了資料,索引都需要重新維護)。
視圖:視圖是一種虛擬表,其內容由查詢定義。
使用T-SQL語句建立視圖
文法:CREEATE VIEW viewname AS <select 語句>
樣本:
USE Bank
GO
if exists(select * from sysobjects where name=‘view_credit_detail‘)
drop view_credit_detail
GO
create view view_credit_detail
AS SELECT ACCOUNT.ACCOUNT_NAME, CREDIT_CARD.CREDIT_CARD_NO, EXCHANGE.LOAN,EXCHANGE.EXTIME,EXCHANGE.EXADDRESS,EXCHANGE.PAY_MONTH
FROM ACCOUNT INNER JOIN CREDIT_CARD
ON ACCOUNT.ACCOUNT_ID=CREDIT_CARD.ACCOUNT_ID INNER JOIN EXCHANGE
ON CREDIT_CARD.CREDIT_CARD_ID=EXCHANGE.CREDIT_CARD_ID
GO
以上代碼錶示,如果在系統檢視表sysobject中已經存在要建立的視圖對象,
則需要先刪除再建立。
Sql Server事物、索引、視圖