① 創建唯一索引的sql語句是什麼
創建唯一索引的sql語句如下:
CREATE [UNIQUE|CLUSTERED] INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME)
其中UNIQUE和CLUSTERED為可選項,分別是建立唯一索引和聚簇索引。
具體解釋為:
UNIQUE:表示此索引的每一個索引值只對應唯一的數據。
CLUSTERED:表示要建立的索引時聚簇索引,即索引項的順序與表中記錄的物理順序一致的索引組織。
② 索引是不是分為唯一索引和非唯一索引
根據資料庫的功能,可以在資料庫設計器中創建四種索引:單列索引、唯一索引、主鍵索引和聚集索引。
1,普通索引
最基本的索引類型,沒有唯一性之類的限制。
2,唯一索引
唯一索引是不允許其中任何兩行具有相同索引值的索引。
當現有數據中存在重復的鍵值時,大多數資料庫不允許將新創建的唯一索引與表一起保存。資料庫還可能防止添加將在表中創建重復鍵值的新數據。例如,如果在 employee 表中職員的姓 (lname) 上創建了唯一索引,則任何兩個員工都不能同姓。
對某個列建立UNIQUE索引後,插入新記錄時,資料庫管理系統會自動檢查新紀錄在該列上是否取了重復值,在CREATE TABLE 命令中的UNIQE約束將隱式創建UNIQUE索引。
3,主鍵索引
簡稱為主索引,資料庫表中一列或列組合(欄位)的值唯一標識表中的每一行。該列稱為表的主鍵。
在資料庫關系圖中為表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。
提示盡管唯一索引有助於定位信息,但為獲得最佳性能結果,建議改用主鍵索引。
4,候選索引
與主索引一樣要求欄位值的唯一性,並決定了處理記錄的順序。在資料庫和自由表中,可以為每個表建立多個候選索引。
5,聚集索引
也稱為聚簇索引,在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引, 即如果存在聚集索引,就不能再指定CLUSTERED 關鍵字。
6,非聚集索引
也叫非簇索引,在非聚集索引中,資料庫表中記錄的物理順序與索引順序可以不相同。一個表中只能有一個聚集索引,但表中的每一列都可以有自己的非聚集索引。如果在表中創建了主鍵約束,SQL Server將自動為其產生唯一性約束。在創建主鍵約束時,如果制定CLUSTERED關鍵字,則將為表產生唯一聚集索引。
(2)sql編號唯一索引擴展閱讀:
並非所有的資料庫都以相同的方式使用索引。作為通用規則,只有當經常查詢索引列中的數據時,才需要在表上創建索引。索引佔用磁碟空間,並且降低添加、刪除和更新行的速度。如果應用程序非常頻繁地更新數據或磁碟空間有限,則可能需要限制索引的數量。在表較大時再建立索引,表中的數據越多,索引的優越性越明顯。
可以基於資料庫表中的單列或多列創建索引。多列索引使您可以區分其中一列可能有相同值的行。
參考資料來源:網路-索引
③ SQL SERVER中索引類型包括的三種類型分別是哪三種
三種索引類型分別是:
1、主鍵索引:不允許具有索引值相同的行,從而禁止重復的索引或鍵值。系統在創建該索引時檢查是否有重復的鍵值,並在每次使用 INSERT 或 UPDATE 語句添加數據時進行檢查。
2、聚集索引:指資料庫錶行中數據的物理順序與鍵值的邏輯(索引)順序相同。一個表只能有一個聚集索引,因為一個表的物理順序只有一種情況。
3、非聚集索引:索引中索引的邏輯順序與磁碟上行的物理存儲順序不同。非聚集索引的葉層不包含數據頁。 相反,葉節點包含索引行。
(3)sql編號唯一索引擴展閱讀
聚集索引對於那些經常要搜索范圍值的列特別有效。使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行在物理相鄰。
例如,如果應用程序執行的一個查詢經常檢索某一日期范圍內的記錄,則使用聚集索引可以迅速找到包含開始日期的行,然後檢索表中所有相鄰的行,直到到達結束日期。
頻繁更改的列 這將導致整行移動,因為 SQL Server 必須按物理順序保留行中的數據值。這一點要特別注意,因為在大數據量事務處理系統中數據是易失的。來自聚集索引的鍵值由所有非聚集索引作為查找鍵使用,因此存儲在每個非聚集索引的葉條目內。
④ 如何創建唯一索引
例如,如果計劃頻繁查詢 employee 表中(其中主鍵為 emp_id)的身份證號碼 (ssn)列,並希望確保身份證號碼是唯一的,則可以在 ssn 上創建唯一索引。如果用戶為一個以上的雇員輸入相同的身份證號碼,則資料庫將顯示錯誤而且無法保存該表。在創建或修改唯一索引時,可以可設置一個忽略重復鍵的選項。如果此選項已設置為「是」,當您試圖通過添加影響多行的數據來創建重復鍵(使用 INSERT 語句)時,則不會添加包含重復項的行;如果此選項設置為「否」,則整個插入操作將失敗,並且將回滾所有數據。 創建唯一索引 在對象資源管理器中,右鍵單擊表,再單擊「設計」。此時,將在表設計器中打開該表。在表設計器菜單上,單擊「索引/鍵」。單擊「添加」。「選定的主/唯一鍵或索引」列表將顯示新索引的系統分配名稱。在網格中,單擊「類型」。從屬性右側的下拉列表中選擇「索引」。在「列」下,選擇要編制索引的列。最多可選擇 16 列。為獲得最佳的性能,請只為每個索引選擇一列或兩列。對於所選的每一列,指定索引是以升序還是以降序來排列此列的值。在網格中,單擊「是唯一的」。從屬性右側的下拉列表中選擇「是」。如果希望忽略會在唯一索引中創建重復鍵(用 INSERT 語句)的數據,請選擇「忽略重復鍵」選項並選擇「是」。在保存表或關系圖時將在資料庫中創建該索引。注意:如果單個列在多行中包含 NULL,則無法對該列創建唯一索引。同樣,如果列的組合在多行中包含 NULL,則無法對多個列創建唯一索引。在進行索引時,它們都被視為重復值。
⑤ 在sql中建立唯一索引要用到什麼保留字
解決方案:
1.必須在TSQL前Set ARITHABORT ON,代碼如下
1: Set ARITHABORT ON
2: GO
3: INSERT INTO ta ..
2.在ADO中,你可以這樣來寫(C#代碼)
MyConnection.Execute("SET ARITHABORT ON");
如果以上你都覺得很麻煩或由於一些原因沒法更改,你可以嘗試修改SQL Server伺服器選項
3.exec sp_dboption 'yourdb','ARITHABORT','true'
或者
4.1: ALTER DATABASE yourdb
2: SET ARITHABORT ON
⑥ SQL Server唯一索引和非唯一索引的區別簡析
SQL Server創建索引時,可以指定Unique使之成為唯一索引。「唯一」顧名思義,但是兩都到底有什麼區別呢?因為索引也是一種物理結構,所以還是要從存儲和結構上分析。
索引結構分葉級和非葉級,分析時我們要分開來看,這個很重要。
文中涉及的索引行大小計算,參考MSDN估計資料庫大小索引部分。
1. 非唯一聚集索引和唯一聚集索引
創建兩個測試表,各10000條整數,tb1唯一,tb2非唯一,有1000條為9999的重復值。
view sourceprint?
01.<img onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_402704').style.display='none'; document.getElementById('Code_Open_Image_402704').style.display='inline'; document.getElementById('Code_Open_Text_402704').style.display='inline';"id="Code_Closed_Image_402704"align="top"src=""width="11"height="16"style="display: none;"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif"><img onclick="this.style.display='none'; document.getElementById('Code_Open_Text_402704').style.display='none'; getElementById('Code_Closed_Image_402704').style.display='inline'; getElementById('Code_Closed_Text_402704').style.display='inline';"id="Code_Open_Image_402704"style="display: none;"align="top"src=""width="11"height="16"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif">Codecreate table tb1
02.(col1int);
03.declare@iint=1
04.while@i<10001
05.begin
06.insert into tb1 values(@i);
07.set@i=@i+1;
08.end;
09.create unique clustered index ucix on tb1 (col1)
10.go
11.-------
12.create table tb2
13.(col2int);
14.declare@iint=1
15.while@i<9001
16.begin
17.insert into tb2 values(@i);
18.set@i=@i+1;
19.end;
20.go
21.insert into tb2 values(9999)
22.go1000;
23.create clustered index cix on tb2 (col2)
24.go
先查詢索引的一些基本狀況:
發現多出一個UNIQUIFIER,同樣葉級也是一樣。MSDN說明:
「如果聚集索引不是唯一的索引,SQL Server 將添加在內部生成的值(稱為唯一值)以使所有重復鍵唯一。此四位元組的值對於用戶不可見。僅當需要使聚集鍵唯一以用於非聚集索引中時,才添加該值。」
還有UNIQUIFIER不是一個全局自增列,重復記錄增加時此值會發生改變,並且它是一個可為null的變長列。
現在來算一算索引行大小:
兩個表都是只有一個int型可為NULL的欄位,而聚集索引葉級是存儲數據本身
葉級是一個4位元組的INT列,無變長列,加上3位元組的NULL點陣圖,再加上4位元組的行頭開銷:兩個表的葉級minSize =4+0+3+4=11
非葉級是一個4位元組的INT列,無變長列,加上3位元組的NULL點陣圖,加上1位元組的行頭開銷,再加6位元組的子頁指針:兩個表的非葉級minSize=4+0+3+1+6=14
tb1的索引行大小是一致的minSize=maxSize,因為它是唯一的。tb2的索引行大小不一致,有大有小,大的索引行是因為:a)不唯一 b)UNIQUIFIER
唯一標識列增加了2+1*2+4=8位元組開銷,tb2的min和max相差就是這8位元組。
tb2的葉級maxSize=4+8+3+4=19
tb2的非葉級maxSize=4+8+3+1+6=22
小結:非唯一聚集索引為保證索引鍵值唯一性,會生成UNIQUIFIER與鍵列一起組成索引鍵值。同時無論在葉級還是非葉頁級,都比唯一索引佔用更多存儲空間。
⑦ mysql 「索引」能重復嗎「唯一索引」與「索引」區別是什麼
一、使用不同:
主鍵索引是在創建主鍵時一起創建的,是基於主鍵約束而建立的,是不可以為空,也不可以重復。
唯一索是引基於唯一約束而建立的,可以為空不可以重復,主鍵索引本身就具備了唯一索引的功能。
二、作用不同:
唯一索引的作用跟主鍵的作用一樣。不同的是,在一張表裡面只能有一個主鍵,主鍵不能為空,唯一索引可以有多個,唯一索引可以有一條記錄為空,即保證跟別人不一樣就行。
比如學生表,在學校裡面一般用學號做主鍵,身份證則弄成唯一索引;而到了教育局,他們就把身份證號弄成主鍵,學號換成了唯一索引。
三、定義不同:
普通索引:這是最基本的索引類型,而且它沒有唯一性之類的限制。
唯一性索引:這種索引和前面的「普通索引」基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一。
(7)sql編號唯一索引擴展閱讀:
要對一個表建立唯一索引,可以使用關鍵字UNIQUE。對聚簇索引和非聚簇索引都可以使用這個關鍵字。
例子
CREATE UNIQUE CLUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
其中:CLUSTERED INDEX是用來建立聚簇索引的關鍵字,此語句的意思是在表mytable上的mycolumn欄位上創建一個名為myclumn_cindex的聚簇索引,且為唯一索引。
⑧ 在SQL中,唯一索引是什麼喲
這種索引和前面的「普通索引」基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一。唯一性索引可以用以下幾種方式創建:
創建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
創建表的時候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );