主鍵、外鍵和索引的區別?
|
主鍵 |
外鍵 |
索引 |
定義: |
唯一標識一條記錄,不能有重複的,不允許為空白 |
表的外鍵是另一表的主鍵, 外鍵可以有重複的, 可以是空值 |
該欄位沒有重複值,但可以有一個空值 |
作用: |
用來保證資料完整性 |
用來和其他表建立聯絡用的 |
是提高查詢排序的速度 |
個數: |
主鍵只能有一個 |
一個表可以有多個外鍵 |
一個表可以有多個惟一索引 |
設定索引
若要設定外鍵,在參照表(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