Sql Server事物、索引、視圖,sqlserver

來源:互聯網
上載者:User

Sql Server事物、索引、視圖,sqlserver

事務概念:
事務是一種機制,它包含了一組資料庫操作命令,而且將所有的命令作為一個整體向資料庫提交或撤銷。
這組命令要麼執行,要麼都不執行,所以事務是一個不可分割的邏輯工作單元。

事務的特點:
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 2005中的索引,視圖有什用

索引是為了提升資料查詢效能,視圖一般用於給使用者提供一個統一的介面而屏蔽掉無用或需要保密的資訊。
一般來說,如果資料量不是太大,比如只有幾萬條記錄,不需要建索引,索引本身也是一種資料,系統為了維護索引,是需要開銷的。如果資料量非常大,就一定會用到索引技術。比如上百萬、幾千萬的資料量。此時如果在資料表上沒有索引,資料查詢會非常慢。索引其實就是預先給資料排序,比如社會安全號碼,如果在這個欄位上有索引,那麼從大到小都已經有序了,需要查詢某一個號碼,系統可以很快檢索到對應的資料。
在資料庫中,不是每一個層級的使用者都需要全部資訊,在某些時候,有些敏感的資訊甚至只能給具有合適許可權的人員,即便使用者進入了資料庫(不是指的程式介面檢索,而是直接進入了資料庫管理系統),也不可以讓他查看全部資訊,此時就可以用視圖的方法,讓使用者只能查看他應該看的資訊,真正的基礎資料表屏蔽起來。
 
sql server 2005 索引跟視圖的功可以有什不同

據庫中索引原理
實際上,您可以把索引理解為一種特殊的目錄。微軟的SQL SERVER提供了兩種索引:

叢集索引(clustered index,也稱聚類索引、簇集索引)和非叢集索引(nonclustered index,也稱非聚類索引、非簇集索引)。下面,我們

舉例來說明一下叢集索引和非叢集索引的區別:

其實,我們的漢語字典的本文本身就是一個叢集索引。比如,我們要查“安”字,就會很自然地翻開字典的前幾頁,因為“安”的拼音是“an

”,而按照拼音排序漢字的字典是以英文字母“a”開頭並以“z”結尾的,那麼“安”字就自然地排在字典的前部。如果您翻完了所有以“a”

開頭的部分仍然找不到這個字,那麼就說明您的字典中沒有這個字;同樣的,如果查“張”字,那您也會將您的字典翻到最後部分,因為“張

”的拼音是“zhang”。也就是說,字典的本文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內容。

我們把這種本文內容本身就是一種按照一定規則排列的目錄稱為“叢集索引”。

如果您認識某個字,您可以快速地從自動中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方

法找到您要查的字,而需要去根據“偏旁部首”查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合“部首

目錄”和“檢字表”而查到的字的排序並不是真正的本文的排序方法,比如您查“張”字,我們可以看到在查部首之後的檢字表中“張”的頁

碼是672頁,檢字表中“張”的上面是“馳”字,但頁碼卻是63頁,“張”的下面是“弩”字,頁面是390頁。很顯然,這些字並不是真正的分

別位於“張”字的上下方,現在您看到的連續的“馳、張、弩”三字實際上就是他們在非叢集索引中的排序,是字典本文中的字在非叢集索引

中的映射。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到您所需要的頁碼。

我們把這種目錄純粹是目錄,本文純粹是本文的排序方式稱為“非叢集索引”。

通過以上例子,我們可以理解到什麼是“叢集索引”和“非叢集索引”。

進一步引申一下,我們可以很容易的理解:每個表只能有一個叢集索引,因為目錄只能按照一種方法進行排序

視圖的好處,可以主要分為四點:
我簡單的說一下,希望你能明白。

第一點:
使用視圖,可以定製使用者資料,聚焦特定的資料。

解釋:
在實際過程中,公司有不同角色的工作人員,我們以銷售公司為例的話,
採購人員,可以需要一些與其有關的資料,而與他無關的資料,對他沒
有任何意義,我們可以根據這一實際情況,專門為採購人員建立一個視
圖,以後他在查詢資料時,只需select * from view_caigou 就可以啦。

第二點:使用視圖,可以簡化資料操作。

解釋:我們在使用查詢時,在很多時候我們要使用彙總函式,同時還要
顯示其它欄位的資訊,可能還會需要關聯到其它表,這時寫的語句可能
會很長,如果這個動作頻繁發生的話,我們可以建立視圖,這以後,我
們只需要select * from view1就可以啦~,是不是很方便呀~

第三點:使用視圖,基表中的資料就有了一定的安全性

因為視圖是虛擬,物理上是不存在的,只是儲存了資料的集合,我們可以
......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.