1、主鍵約束不允許出現 null 值。任何索引條目的索引鍵都不允許包含null。唯一約束允許包含 null 值,但唯一約束把兩個 null 值當作重複值,所以施加了唯一約束的每一列只允許包含乙個 null 值。
2、建立主鍵時會自動建立聚集索引,除非當前表中已經含有了聚集索引或是建立主鍵時指定了 nonclustered 關鍵字。
3、建立唯一約束時會自動建立非聚集索引,除非你指定了 clustered 關鍵字並且當前表中還沒有聚集索引。
4、每個表中只能有乙個主鍵,但可以有多個唯一約束。
--以資料完整性為目標的話,最好建立約束,這使得對應的索引的目標一目了然建立唯一約束
alter
table tablename add
constraint u_store unique
nonclustered
(username)
--建立唯一索引
create
unique
nonclustered
index
[ak_product_name
]on production.product([
name
])
--自增列插入失敗,id依舊會增加
--無法更新標識列
createview codetable test_ident(id int
identity,name varchar(50
))alter
table test_ident alter
column name varchar(10)--
製造錯誤
insert
into
test_ident
select
top10 name from sys.objects o where type='u
'and
len(name)>
10--
正常插入
insert
into
test_ident
select
top10 name from sys.objects o where type='u
'and
len(name)<=
10--
檢視資料
select
*from
test_ident
--自增列插入失敗,id依舊會增加
--無法更新標識列
update test_ident set id =
1where id=2--
clear up
drop
table test_ident
對於非聚集索引,如果我們把非聚集索引的葉節點看成一張表的資料頁,那就可以把非聚集索引過渡看成是「聚集索引」,只不過這個「聚集索引」的資料頁存放的是索引列,包含列、書籤等。如果我們要查詢的字段包含在索引列、包含列,那就直接返回結果,否則就得通過書籤跳轉到底層資料表去查詢。
五 SQL 索引 約束 主鍵約束
第一正規化要求每張表都要有主鍵,因此主鍵約束是非常重要的,而且 主鍵約束是外來鍵關聯的基礎條件。主鍵約束為表之間的關聯提供了鏈結點。主鍵必須能夠唯一標識一條記錄,即主鍵欄位中的值必須是唯一的,而且不能包含null 值。雖然一張表中可以有多個unique 約束和非空約束,但每個表中只能有乙個主鍵約束。...
1 7 3 1主鍵和唯一索引約束
通常,資料更改語句 例如 insert或 update 會 發生錯誤,這些錯誤 會違反主鍵,唯一鍵或外來鍵約束。如果您使用事務儲存引擎 例如 innodb,mysql會自動回滾該語句。如果您使用的是非事務性儲存引擎,則mysql會在發生錯誤的行停止處理該語句,並保留所有未處理的行。mysql支援的i...
主鍵索引和非主鍵索引
對於一張資料表,id為主鍵 非主鍵索引和主鍵索引的區別是 非主鍵索引的葉子節點存放的是主鍵的值,主鍵索引的葉子節點存放的是整行資料。其中,非主鍵索引又稱為二級索引,主鍵索引又稱為聚簇索引。根據這兩種結構我們來進行下查詢,看看他們在查詢上有什麼區別。1 如果查詢語句是 select from tabl...