索引和約束

2022-04-01 14:44:44 字數 2733 閱讀 6722

一、 雖然索引引用可以提高資料的查詢速度,但是任何事物都有雙刃劍,它也有一些缺點:

1、 索引會佔據一定的磁碟空間,就像有安筆劃的查詢的目錄的書會比沒有這種目錄的書頁數要多一些一樣。

2、 索引減慢了資料的插入和刪除速度。因為每次刪除更新資料都要更新索引,乙個表擁有的索引越多則寫操作的平均效能下降越大。

create index 索引名  

on 表名(字段

1,字段

2,字段

3.。。。

)刪除索引:drop index 

表名 索引名

三、 約束:資料庫中約束包括以下幾種:非空約束,唯一約束,check

約束,主鍵約束和外來鍵約束。

1、 非空約束:非空約束的定義就是在建立表的時候在字段型別後新增not null

。   非空約束不僅對插入資料

insert

語句有作用同樣也對

update

有作用。

2、 唯一約束:唯一約束又稱為unique

約束,它防止乙個特定的列中兩個記錄具有一致的值。唯一約束分為但字段唯一約束和復合唯一約束兩種型別:

如果希望乙個欄位在表中的值是唯一的那麼就可以講唯一約束設定的這個欄位上,設定唯一約束只要在字段後型別後加unique

就行了。

復合唯一約束:復合唯一約束是建立在多個欄位上的約束,被約束的字段不能同時重複。定義復合唯一約束語法如下:

constraint 約束名稱 

unique(欄位1

,欄位2

,欄位3.

。。。)

create t able t_person (fnumber v archar(20), 

fdepartmentnumber v archar(20), 

fname v archar(20),f age int , 

constraint unic_dep_num unique(fnumber ,fdepartmentnumber))

在已經存在的表中新增唯一約束:

alter table 表名 

add constraint 

約束名稱 

unique(欄位1

,欄位2.

。。。。

)刪除已經存在的約束:

alter talbe 表名 

drop constraint 

唯一約束名稱 

四、 check約束:

check

約束會檢測輸入到記錄中的值是否滿足乙個條件,如果不滿足這個條件則對資料庫做修改不會成功。check約束對於插入、更新的任何對資料進行變化的操作都進行檢測。

create t able t_person ( 

fnumber v archar(20),fname v archar(20), 

f age int check(f age >0), 

fworky ear int check(fworky ear>0)) 

除了可以在 check 

約束中使用常量表示式之外,還可以在 

check 

約束中使用函式,create t able t_person ( 

fnumber v archar(20) check (len(fnumber)>12), 

fname v archar(20), 

fage int check(f age >0), 

fworky ear int check(fworky ear>0))

check 子句中是不能引用其他列的, 如果希望 

check 

子句中的條件語句中使用其他列,則必須在 

create table 

語句的末尾使用 

constraint 

關鍵字定義它。

constraint 約束名

check(

約束條件

) 重新編寫上述的 

sql 

語句:create t able t_person ( 

fnumber v archar(20), 

fname v archar(20), 

fage int , 

fworky ear int, 

constraint ck_1 check(fworky ear< fage))

五、 主鍵約束:主鍵必須能夠唯一標識一條記錄, 也就是主鍵欄位中的值必須是唯一的, 而且不能包含null 

值。從這種意義上來說,主鍵約束是 

unique 

約束和非空約束的組合。    在 

crea te t able 

語句中定義主鍵約束非常簡單, 和 

unique 

約束和非空約束非常類似,只要在字段定義後新增 

primary key 

關鍵字即可。

除了這種由單一字段組成的主鍵之外, 還可以由多個欄位來組成主鍵, 這樣的主鍵被稱為復合主鍵或者聯合主鍵。

create t able t_person (fnumber v archar(20), 

fname varchar(20),f age int , 

constraint pk_1 primary key(fnumber ,fname))

六、外來鍵約束:我們可以在建立表的時候就新增外來鍵約束,其定義方式和復合主鍵類似,語法如下:foreign key  

外來鍵字段  

references  

外來鍵表名

(外來鍵表的主鍵字段

)

索引和約束

索引優點 1.索引使得檢索的資料的速度大大加快 2.建立索引時自動新增了唯一性約束,確保每一條資料的唯一性 3.可以加快表與表之間的鏈結,提高多表查詢的速度 4.在分組和排序子句進行資料彙總的時候,顯著減少查詢中分組和排序的時間。每張表都會有乙個rowid實體地址列,用來唯一標誌一條記錄所在物理 位...

mysql 索引與約束 mysql索引和約束區別

一 約束 作用 是為了保證資料的完整性而實現的摘自一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具 約束 這裡主要講解mysql的約束 1 非空約束 not null 指示某列不能儲存null 值 2 唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null除外 ...

索引和約束的刪除

建立主建約束和唯一約束時會自動建立同名索引。相關資料字典 user constraints,user indexes 使用下面命令刪除索引索引時,會提示錯誤。drop index table pk 這是可以刪除約束再刪除索引。alter table table drop constraint tab...