主鍵:唯一識別字段
要求:記錄一旦插入到表中,主鍵最好不要再修改,因為主鍵是用來唯一定位記錄的,修改了主鍵,會造成一系列的影響。
基本選取原則:選擇與業務無關的字段,命名id
id欄位常用型別:
自增整數bigint型別:資料庫會在插入資料時自動為每一條記錄分配乙個自增整數,這樣我們就完全不用擔心主鍵重複,也不用自己預先生成主鍵;test全域性唯一guid型別:使用一種全域性唯一的字串作為主鍵,類似
8f55d96b-8acc-4636-8cb8-76bf8abc2f57
。guid演算法通過網絡卡mac位址、時間戳和隨機數保證任意計算機在任意時間生成的字串都是不同的,大部分程式語言都內建了guid演算法,可以自己預算出主鍵。
id_num
id_type
other columns...1a
......2a
......2b
......
如果我們把上述表的id_num
和id_type
這兩列作為聯合主鍵,那麼上面的3條記錄都是允許的,因為沒有兩列主鍵組合起來是相同的。
沒有必要的情況下,我們盡量不使用聯合主鍵,因為它給關係表帶來了複雜度的上公升。
idname
other columns...11班
22班......
idclass_id
name
other columns...11
小明......22
小紅......
外來鍵:在students表中,通過class_id這一字段,將資料與另一張表關聯起來,此時這個class_id,稱之為外來鍵
注!外來鍵並不是通過列名實現的,而是通過定義外來鍵約束實現的刪除外來鍵約束:其中,外來鍵約束的名稱
fk_class_id
可以任意,foreign key (class_id)
指定了class_id
作為外來鍵,references classes (id)
指定了這個外來鍵將關聯到classes
表的id
列(即classes
表的主鍵)alter table students
add constraint fk_class_id
foreign key (class_id)
references classes (id);
注!刪除外來鍵約束並沒有刪除外來鍵這一列。刪除列是通過drop column ...
實現的。
alter table students
drop foreign key fk_class_id;
通過乙個表的外來鍵關聯到另乙個表,我們可以定義出一對多關係。多對多」關係。就是通過兩個一對多關係實現的,即通過乙個中間表,關聯兩個一對多關係,就形成了多對多關係。例如,乙個老師可以對應多個班級,乙個班級也可以對應多個老師,因此,班級表和老師表存在多對多關係
多對多實際上是倆個一對多關係實現的,通過中間表,關聯倆個一對多的關係,行成了多對多的關係。
teachers id
name
1張老師
2趙老師
3王老師
4***
class id
name1一班
2二班teacher_class中間表 id
teacher_id
class_id11
1212
3214
2253
1642
通過中間表teacher_class,可知班級表class與老師表teachers之間的關係乙個表的記錄對應到另一張表的唯一記錄同理,class到teachers的關係:
關聯式資料庫中,對某一列或多個列的值進行預排序的資料結構,通過使用索引,可以讓資料庫系統不用掃瞄整個表,而是直接定位到符合條件的記錄,加快查詢速度。
建立索引:add index
索引的效率取決於索引列的值是否相同,即該列的值越不相同,那麼索引效率越高。
對於主鍵,關係型資料庫會自動建立主鍵索引,因為主鍵是唯一的,所以使用主鍵效率最高
alter table students
add index idx_score(score);
使用add index idx_score (score)就建立了乙個名稱為idx_score,使用列score的索引。
索引名稱是任意的,索引如果有多列,可以在括號裡依次寫上
alter table students
add index idx_score(name,score);
索引優缺點:
優點:提高查詢效率
缺點:在增、刪、改時,需要同時修改索引,因此,索引越多,增、刪、改速度越慢
唯一索引:
在設計關係資料表的時候,看上去唯一的列,例如身份證號、郵箱位址等,因為他們具有業務含義,因此不宜作為主鍵。
但是,這些列根據業務要求,又具有唯一性約束:即不能出現兩條記錄儲存了同乙個身份證號。這個時候,就可以給該列新增乙個唯一索引。例如,我們假設students
表的name
不能重複:
alter table students
add unique index uni_name (name);
通過unique關鍵字我們就新增了乙個唯一索引。
也可以只對某一列新增乙個唯一約束而不建立唯一索引。
alter table students
add constraint uni_name unique (name);
主鍵 外來鍵和索引的關係
主鍵 唯一標識一條記錄,不能有重複的,不允許為空。外來鍵 表的外來鍵是另乙個表的主鍵,外來鍵可以有重複的,可以是空值。索引 高效查詢資料記錄的一種資料結構。該欄位沒有重複值,但可以有乙個空值。1 乙個表只有乙個主鍵,但可以有多個索引 2 使用主鍵會自動建立索引 唯一索引 也可以在非主鍵上建立索引。1...
索引 主鍵 外來鍵
參 索引的優點 加快查詢表記錄的速度。索引的缺點 會減慢寫的速度 如 insert update 占用物理儲存空間。2 簡述普通索引與主鍵的約束規則。參 1 index普通索引 乙個表中可以有多個index欄位 欄位的值允許有重複,且可以賦null值 經常把做查詢條件的字段設定為index欄位 in...
主鍵 外來鍵 索引
1 主鍵 外來鍵 索引 主鍵外來鍵 索引定義 唯一標識一條記錄,不能重複,不能為空 表的外來鍵是另一張表的主鍵,外來鍵可以重複,也可以為空值 索引沒有重複,可以有乙個空值 作用用來保證資料的完整性 用來和其他表建立聯絡 提高資料查詢的速度 個數主鍵只能有乙個 乙個表可以有多個外來鍵 乙個表可以有多個...