唯一性約束和唯一性索引的區別
“唯一性約束”和“唯一性索引”是不同的。
一、 建立唯一性約束的語法,使用create table或者alter table
1. 在欄位級約束定義
-- 命名
create table tmp_table
(
a int constraint pk_tmp_table_a primary key,
b varchar(10) constraint uq_tmp_table_b unique
)
-- 不命名
create table tmp_table
(
a int primary key,
b varchar(10) unique
)
2. 在表約束定義
-- 命名
create table tmp_table
(
a int,
b varchar(10),
constraint pk_tmp_table_a primary key(a),
constraint uq_tmp_table_b unique(b ASC)
)
-- 不命名
create table tmp_table
(
a int,
b varchar(10),
primary key(a),
unique(b ASC)
)
二、 建立唯一性索引的語法,使用create index
-- 必須命名
CREATE UNIQUE NONCLUSTERED INDEX xak_tmp_table_b ON tmp_table(b DESC)
--不指定[CLUSTERED | NONCLUSTERED],預設為NONCLUSTERED(非聚集)
三、當在表中建立主鍵約束或者唯一性鍵約束時,SQL Server自動建立一個唯一性索引
這是以上指令碼建立的約束:
constraint_type | constraint_name | constraint_keys |
PRIMARY KEY (clustered) | pk_tmp_table_a | a |
UNIQUE (non-clustered) | uq_tmp_table_b | b |
這是索引:
index_name | index_description | index_keys |
pk_tmp_table_a | clustered, unique, primary key located on PRIMARY | a |
uq_tmp_table_b | nonclustered, unique, unique key located on PRIMARY | b |
xak_tmp_table_b | nonclustered, unique located on PRIMARY | b(-) |
可以看出,為主鍵和唯一性約束自動建立了同名唯一性索引。
現在為表建立了排序順序相反的兩個索引uq_tmp_table_b和xak_tmp_table_b,不知道資料庫會怎麼工作?
四、題外話
表級約束中可以指定列的排序順序(col_name ASC | DESC),但不能指定列的NULL約束;
欄位級約束中可以指定列的NULL約束,但不能指定列的排序順序;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-796420/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於唯一性索引造成堵塞和非唯一性索引造成堵塞的區別索引
- 查詢(看)表的主鍵、外來鍵、唯一性約束和索引索引
- ORACLE: 查詢(看)表的主鍵、外來鍵、唯一性約束和索引Oracle索引
- 表上建立唯一性索引,SQL*Loader用或不用dirdect的區別索引SQL
- 【CONSTRAINT】具有唯一性約束的列是否可以插入空值AI
- 資料庫約束 主鍵-唯一性-Check-外來鍵資料庫
- 唯一性索引優化實踐索引優化
- Logical Standby中為什麼要求表中資料的唯一性約束
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- 索引唯一性掃描(INDEX UNIQUE SCAN)索引Index
- 建約束(Constraint)時隱式建立索引(Index)及先建立索引後建立約束的區別AI索引Index
- 唯一性索引(Unique Index)與普通索引(Normal Index)差異(上)索引IndexORM
- 唯一性索引(Unique Index)與普通索引(Normal Index)差異(中)索引IndexORM
- 唯一性索引(Unique Index)與普通索引(Normal Index)差異(下)索引IndexORM
- 轉載-treedump索引讀取索引儲存的資料值--非唯一性索引索引
- MySQL中的 UNIQUE約束和UNIQUE索引MySql索引
- 資訊唯一性原則
- 主鍵,唯一性約束,不同session間未提交事務中的爭議性資料引起的問題。Session
- 【INDEX】Oracle中主鍵、唯一約束與唯一索引之區別IndexOracle索引
- MySQL的btree索引和hash索引的區別MySql索引
- 集合框架-TreeSet保證元素唯一性和自然排序的原理和圖解框架排序圖解
- 確保物件的唯一性——單例模式 (五)物件單例模式
- 確保物件的唯一性——單例模式 (四)物件單例模式
- 確保物件的唯一性——單例模式 (三)物件單例模式
- 確保物件的唯一性——單例模式 (二)物件單例模式
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- [轉]聚集索引和非聚集索引的區別索引
- 使用聚集索引和非聚集索引的區別索引
- set unused column和檢視,約束,同義詞和索引的關係索引
- 很多人比較糾結的約束和索引的關係索引
- 用函式索引構造特殊的約束函式索引
- Oracle如何管理帶約束的B樹索引Oracle索引
- 【指令碼】如何確保應用程式的唯一性指令碼
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- MySQL單列索引和組合索引的區別MySql索引
- MySQL Hash索引和B-Tree索引的區別MySql索引
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- Ajax 實現驗證郵箱地址唯一性