主鍵、外來鍵和索引的區別?
主鍵外來鍵
索引定義:
唯一標識一條記錄,不能有重複的,不允許為空
表的外來鍵是另一表的主鍵, 外來鍵可以有重複的, 可以是空值
該欄位沒有重複值,但可以有乙個空值
作用:用來保證資料完整性
用來和其他表建立聯絡用的
是提高查詢排序的速度
個數:主鍵只能有乙個
乙個表可以有多個外來鍵
乙個表可以有多個惟一索引
設定索引
若要設定外來鍵,在參照表(pc表) 和被參照表(parts表)中,相對應的兩個字段必須都設定索引(index)。
對parts表:
alter table parts add index idx_model (model);
這句話的意思是,為parts表增加乙個索引,索引建立在model欄位上,給這個索引起個名字叫idx_model。
對pc表也類似:
alter table pc add index idx_cpumodel (cpumodel);
定義外來鍵
下面為兩張表之間建立前面所述的那種「約束」。因為pc的cpu型號必須參照parts表中的相應型號,所以我們將pc表的cpumodel欄位設定為「外來鍵」(foreign key),即這個鍵的參照值來自於其他表。
alter table pc add constraint fk_cpu_model
foreign key (cpumodel)
references parts(model);
級聯操作
級聯更新:更新主鍵時,外來鍵也隨之更新。
可以在定義外來鍵的時候,在最後加入這樣的關鍵字:
on update cascade;
即在主表更新時,子表(們)產生連鎖更新動作,似乎有些人喜歡把這個叫「級聯」操作。
如果把這語句完整的寫出來,就是:
alter table pc add constraint fk_cpu_model
foreign key (cpumodel)
references parts(model)
on update cascade;
級聯刪除:刪除主鍵時,外來鍵也隨之刪除。
alter table pc add constraint fk_cpu_model
foreign key (cpumodel)
references parts(model)
on delete cascade;
級聯更新、刪除:
on update cascade on delete cascade
sqlserver2005設定級聯刪除、級聯更新在使用linq時,
資料庫中有表外來鍵關聯時,刪除操作有時會出錯,儘管還可以用sql語句,但有時將這種操作交給資料庫,會節省很多開銷。
一、選擇"關係"
按照上面的方法,將資料庫中所有表都更改一遍,這樣在linq中刪除時,資料庫便自動級聯刪除了
主鍵自增長 外來鍵約束 級聯更新
1 自動增長 配合int型別的主鍵使用,自增後的id值取決於上一條 1 如果某一列是數值型別的,使用auto increment可以來完成值的自動增長 2 建立表時,新增自動增長 create table stu 3 刪除自動增長 alter table stu modify id int 4 新增...
主鍵與外來鍵之間的級聯設定
create table alter table時可以 on delete on update 如果沒有指定 on delete 或 on update 則預設為 no action on delete no action 指定如果試圖刪除某一行,而該行的鍵被其他表的現有行中的外來鍵所引用,則產生錯...
Oracle外來鍵級聯刪除和級聯更新
oracle在外鍵的刪除上有no action 類似restrict cascade和set null三種行為。下面以學生 班級為例說明不同情況下的外來鍵刪除,學生屬於班級,班級的主鍵是學生的外來鍵。班級表 crate table tb class id number not null,班級主鍵 n...