主鍵 約束和索引

2022-02-16 06:09:05 字數 1516 閱讀 9171

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依舊會增加

--無法更新標識列

create

table 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

view code

對於非聚集索引,如果我們把非聚集索引的葉節點看成一張表的資料頁,那就可以把非聚集索引過渡看成是「聚集索引」,只不過這個「聚集索引」的資料頁存放的是索引列,包含列、書籤等。如果我們要查詢的字段包含在索引列、包含列,那就直接返回結果,否則就得通過書籤跳轉到底層資料表去查詢。

五 SQL 索引 約束 主鍵約束

第一正規化要求每張表都要有主鍵,因此主鍵約束是非常重要的,而且 主鍵約束是外來鍵關聯的基礎條件。主鍵約束為表之間的關聯提供了鏈結點。主鍵必須能夠唯一標識一條記錄,即主鍵欄位中的值必須是唯一的,而且不能包含null 值。雖然一張表中可以有多個unique 約束和非空約束,但每個表中只能有乙個主鍵約束。...

1 7 3 1主鍵和唯一索引約束

通常,資料更改語句 例如 insert或 update 會 發生錯誤,這些錯誤 會違反主鍵,唯一鍵或外來鍵約束。如果您使用事務儲存引擎 例如 innodb,mysql會自動回滾該語句。如果您使用的是非事務性儲存引擎,則mysql會在發生錯誤的行停止處理該語句,並保留所有未處理的行。mysql支援的i...

主鍵索引和非主鍵索引

對於一張資料表,id為主鍵 非主鍵索引和主鍵索引的區別是 非主鍵索引的葉子節點存放的是主鍵的值,主鍵索引的葉子節點存放的是整行資料。其中,非主鍵索引又稱為二級索引,主鍵索引又稱為聚簇索引。根據這兩種結構我們來進行下查詢,看看他們在查詢上有什麼區別。1 如果查詢語句是 select from tabl...