共計 2418 個字符,預計需要花費 7 分鐘才能閱讀完成。
本篇內容介紹了“mysql 復合主鍵指的是什么意思”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在 mysql 中,復合主鍵是指數據庫表的主鍵含有一個以上的字段組成,即多字段主鍵;復合主鍵是主鍵的一種,與主鍵具有相同的功能和定義。復合主鍵不能包含不必要的多余列;當把復合主鍵的某一列刪除后,如果剩下的列構成的主鍵仍然滿足唯一性原則,那么這個復合主鍵是不正確的。
什么是數據表的復合主鍵?
所謂的復合主鍵,就是指你表的主鍵含有一個以上的字段組成。
MySQL 多字段主鍵又可以成為復合主鍵。復合主鍵也是主鍵的一種與主鍵具有相同的功能和定義。
主鍵約束即在表中定義一個主鍵來唯一確定表中每一行數據的標識符。主鍵可以是表中的某一列或者多列的組合,其中由多列組合的主鍵稱為復合主鍵。
復合主鍵不能包含不必要的多余列。當把復合主鍵的某一列刪除后,如果剩下的列構成的主鍵仍然滿足唯一性原則,那么這個復合主鍵是不正確的。這是最小化原則。
例如:
create table test
name varchar(19),
id number,
value varchar(10),
primary key (name,id)
)
上面的 name 和 id 字段組合起來就是你 test 表的復合主鍵
它的出現是因為你的 name 字段可能會出現重名,所以要加上 ID 字段這樣就可以保證你記錄的唯一性
為什么會出現復合主鍵
這是因為表 name 字段可能出現重名的情況,所以要加上 id 字段來保證記錄的唯一性,而我們在開發中,主鍵字段數是保持一個是比較好的,非要創建兩個復合主鍵,那么在創建表的時候就應該尋找一個能唯一性標識該對象的一個字段來識別。
那么問題又來了,不是說一個表只能有一個主鍵嗎?主鍵是一個表的唯一索引啊,那么為何一個表可以創建多個主鍵呢?
其實“主鍵是唯一的索引”這話有點歧義的,舉個例子說明:我們習慣性的在表中都會有一個 id 字段,設置為自動增長,并設置為主鍵,這時候 主鍵是唯一的索引,id 自動增長保證來唯一性。此時,在創建一個字段 name varchar(50),也被設置為了主鍵,這時候 id 和 name 就成為了復合主鍵了,而表中的 name 字段在插入數據時是可以插入相同的 name 值的,這時候又有問題了,不是說 主鍵是唯一索引嗎?怎么能有相同的值?
所以說 主鍵是唯一性索引 是有歧義的;主鍵是唯一性索引的前提是 當表中只有一個主鍵時,它才是唯一的索引;當表中有多個主鍵時,稱為復合主鍵,復合主鍵聯合保證唯一性索引,即可理解為復合主鍵聯合起來成為了一個表的唯一性索引(主鍵)。為什么自增長 ID 已經可以作為唯一標識的主鍵,為啥還需要復合主鍵呢?因為,并不是所有的表都要有 id 這個字段啊,比如,我們建一個學生表,沒有唯一能標識學生的 ID,怎么辦呢?學生的名字、年齡、班級都可能重復,無法使用單個字段來唯一標識,這時,我們可以將多個字段設置為主鍵,形成復合主鍵,這多個字段聯合標識唯一性,其中,某幾個主鍵字段值出現重復是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重復。
總結:在開發中,主鍵字段數最好保持一個,非要創建兩個復合主鍵,那么在創建表的時候就應該要尋找一個能唯一性標識該對象的一個字段來識別。簡而言之就是少用復合主鍵。
如何添加復合主鍵?
可以在創建表時添加復合主鍵,此時主鍵由多個字段聯合組成,語法規則如下:
PRIMARY KEY [字段 1,字段 2,…, 字段 n]
示例:創建數據表 tb_emp,假設表中沒有主鍵 id,為了唯一確定一個員工,可以把 name、deptId 聯合起來作為主鍵
mysql CREATE TABLE tb_emp
- ( - name VARCHAR(25),
- deptId INT(11),
- salary FLOAT,
- PRIMARY KEY(id,deptId)
- );
Query OK, 0 rows affected (0.37 sec)
聯合主鍵
聯合主鍵和復合主鍵的區別在于:聯合主鍵體現在多個表上,復合主鍵體現在一個表中的多個字段。
學生表:student
create table student(
id int auto_increment comment 主鍵 id ,
name varchar(30) comment 姓名 ,
age smallint comment 年齡 ,
primary key(id)
課程表:course
create table course(
id int auto_increment comment 主鍵 id ,
name varchar(30) comment 課程名稱 ,
primary key(id)
學生課程表:stu_course
create table IF NOT EXISTS stu_cour(
id int auto_increment comment 主鍵 id ,
stu_id mediumint comment 學生表 id ,
cour_id mediumint comment 課程表 id ,
primary key(id)
);
此時 stu_course 中 id 就表示聯合主鍵,通過 id 可以獲取學生和課程的一條記錄
所以聯合主鍵,顧名思義就是多個主鍵聯合形成一個主鍵組合,體現在聯合。(主鍵原則上是唯一的,別被唯一值所困擾) 索引可以極大的提高數據的查詢速度,但是會降低插入、刪除、更新表的速度,因為在執行這些寫操作時,還要操作索引文件。簡單的例子 主鍵 A 跟主鍵 B 組成聯合主鍵 C,主鍵 A 跟主鍵 B 的數據可以完全相同,聯合就在于主鍵 A 跟主鍵 B 形成的聯合主鍵 C 是唯一的。
“mysql 復合主鍵指的是什么意思”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!