新聞中心
在數(shù)據(jù)庫(kù)中,主鍵是區(qū)分每個(gè)記錄的唯一標(biāo)識(shí)符。通常情況下,我們會(huì)使用單一主鍵,也就是一列來(lái)作為唯一標(biāo)識(shí)符。但在某些情況下,一個(gè)表可能需要有多個(gè)唯一標(biāo)識(shí)符來(lái)做區(qū)分,這時(shí)候就需要使用雙主鍵。

雙主鍵指的是兩個(gè)或多個(gè)列共同作為唯一標(biāo)識(shí)符,任何一列都不能重復(fù)。下面我們就來(lái)看看如何在數(shù)據(jù)庫(kù)中設(shè)置雙主鍵。
1.創(chuàng)建表
假設(shè)我們需要在一個(gè)員工表中建立雙主鍵,來(lái)區(qū)分每個(gè)員工的唯一性。首先我們需要?jiǎng)?chuàng)建一個(gè)員工表,可以使用以下SQL命令來(lái)創(chuàng)建:
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
eml VARCHAR(50)
);
這里我們只設(shè)置了一個(gè)主鍵,即id,這意味著每個(gè)id都是唯一的。但是在實(shí)際情況中,一個(gè)人可能有多個(gè)不同的id,我們需要設(shè)置第二個(gè)主鍵來(lái)做區(qū)分。
2.設(shè)置第二個(gè)主鍵
在MySQL中,我們可以使用UNIQUE關(guān)鍵字來(lái)設(shè)置一個(gè)列為唯一列。這個(gè)列可以是除了已經(jīng)設(shè)置為主鍵的列之外的任何列。我們可以使用以下命令來(lái)為姓名列創(chuàng)建一個(gè)唯一的約束(也就是第二個(gè)主鍵):
ALTER TABLE employee ADD UNIQUE(name);
執(zhí)行這個(gè)命令之后,我們就設(shè)置了一個(gè)由兩個(gè)列組成的雙主鍵:id和name。即使有兩個(gè)人的id相同,只要他們的姓名不同,他們就可以區(qū)分開(kāi)來(lái)。
3.插入數(shù)據(jù)
在我們向這個(gè)表插入數(shù)據(jù)之前,需要注意一點(diǎn):如果你的表已經(jīng)存在數(shù)據(jù),那么在為它添加另一個(gè)列時(shí),必須確保數(shù)據(jù)列中沒(méi)有重復(fù)的值。否則,添加約束時(shí)會(huì)出錯(cuò)。
假設(shè)我們現(xiàn)在向employee表中插入三個(gè)員工的信息,命令如下:
INSERT INTO employee(id, name, age, eml) VALUES
(101, ‘John’, 20, ‘john@gml.com’),
(102, ‘Bob’, 25, ‘bob@gml.com’),
(103, ‘John’, 30, ‘johnny@gml.com’);
之一個(gè)和第二個(gè)員工的姓名不同,id也不同,因此可以成功插入。但是第三個(gè)員工的姓名和之一個(gè)員工相同,雖然id不同,但是由于我們使用了雙主鍵,因此會(huì)導(dǎo)致插入失敗。
4.刪除主鍵和約束
如果我們需要?jiǎng)h除一個(gè)主鍵或唯一約束,可以使用以下SQL命令:
–刪除主鍵:
ALTER TABLE employee DROP PRIMARY KEY;
–刪除唯一約束:
ALTER TABLE employee DROP INDEX name;
這些命令將刪除主鍵或唯一約束,但不會(huì)刪除列本身。
:
在數(shù)據(jù)庫(kù)中設(shè)置雙主鍵需要兩個(gè)或多個(gè)列共同作為唯一標(biāo)識(shí)符。我們可以使用UNIQUE關(guān)鍵字來(lái)為一個(gè)列創(chuàng)建唯一約束。雙主鍵可以幫助我們更加準(zhǔn)確地區(qū)分不同的記錄,提高數(shù)據(jù)的準(zhǔn)確性和完整性。需要注意的是,添加唯一約束時(shí)要確保數(shù)據(jù)已經(jīng)去重,否則會(huì)出現(xiàn)錯(cuò)誤。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220sql server 中如何設(shè)置兩個(gè)屬性為主鍵
其實(shí)很簡(jiǎn)單的,舉個(gè)例子說(shuō)明如源槐何設(shè)置兩個(gè)
主鍵
–創(chuàng)建學(xué)生表
create
table
學(xué)生表
(
學(xué)號(hào)
int
not
null
primary
key
(學(xué)號(hào)),
姓名
nvarchar(20)
not
null,
性別
bit,
出生日期
int
not
null,
系編碼
int
not
null
)
–創(chuàng)建課程表
create
table
課程表
(
課程號(hào)
int
not
null
primary
key
(課程號(hào)派裂扒),
課程名
nvarchar(100)
not
null,
選修課號(hào)
int,
學(xué)分
decimal(2,1)
)
–創(chuàng)建選課表
create
table
選課表
(
學(xué)號(hào)
int
not
null,
課程號(hào)
int
not
null,
成塵昌績(jī)
decimal(3,1)
primary
key(學(xué)號(hào),課程號(hào))
–將學(xué)號(hào)、課程號(hào)設(shè)為主鍵
)
什么是聯(lián)合主鍵
聯(lián)合主鍵就是用2個(gè)或2個(gè)以上的字段組成主鍵。用這個(gè)主鍵包含的字段作為主鍵,這個(gè)組碰和野合在數(shù)據(jù)表中是唯一,且加了主鍵索引。
例:
create table grade(
stuNum char(10) not null,
courseNum char(10) not null,
grade int not null,
primary key (stuNum,courseNum))字段 stuNum和courseNum就是聯(lián)合主鍵。
擴(kuò)展資料
:
聯(lián)合主鍵可以通過(guò)Hibernate注解 進(jìn)行映射,下面為大家展示三種實(shí)現(xiàn)方式:
方法一:
1.將聯(lián)合主鍵的字段單獨(dú)放在一個(gè)類中,該類需要重寫equals和hashcode方法。
2.在主類中(該類包含聯(lián)合主鍵類中的字段)將聯(lián)合主鍵字段都注解為@Id。
3.最后在該類上加上注解:@IdClass(聯(lián)合主鍵類.class),棚租用來(lái)關(guān)聯(lián)主鍵類。
方法二
1.將聯(lián)合笑喊主鍵的字段單獨(dú)放在一個(gè)類中,該類需要重寫equals和hascode方法。
2.在主類中(該類不包含聯(lián)合主鍵類中的字段)保存該聯(lián)合主鍵類的一個(gè)引用(新增主鍵類屬性),并生成set和get方法。
3.最后為該類屬性添加注解為@EmbeddedId。
方法三
1.將聯(lián)合主鍵的字段單獨(dú)放在一個(gè)類中,該類需要重寫equals和hascode方法。
2.該主鍵類注解為@Embeddable。
3.最后在主類中(該類不包含聯(lián)合主鍵類中的字段)保存該聯(lián)合主鍵類的一個(gè)引用(新增主鍵類屬性),并生成set和get方法,并將該引用注解為@Id。
參考資料
:
百度百科-主鍵
聯(lián)合
主鍵
的意思就是指用2個(gè)或者是2個(gè)以上的字段組成的主鍵,用這個(gè)主鍵包含的字段作為主鍵,這個(gè)組合在數(shù)據(jù)表中是唯一,且附加上了主鍵索引。而數(shù)據(jù)庫(kù)主鍵,指的是一個(gè)列或多列的組合,其值能唯一地標(biāo)識(shí)表中的每一行,通過(guò)它可強(qiáng)制表的實(shí)體完整性。
擴(kuò)展資料:
聯(lián)合主鍵的作用如?;睌y下:
1、保證實(shí)體的完整性。
2、加快數(shù)據(jù)庫(kù)的操作速度。
3、在表中添加新記錄時(shí),DBMS會(huì)自動(dòng)檢查新記錄旦伏的主鍵值,不允許該值與其他記錄的主鍵值重復(fù)。
4、DBMS自明大動(dòng)按主鍵值的順序顯示表中的記錄。
參考資料:
百度百科-數(shù)據(jù)庫(kù)主鍵
聯(lián)合主鍵就是用2個(gè)或2個(gè)以上的字段組成主鍵。用這個(gè)主鍵包含的字段作為主鍵,這個(gè)組合在數(shù)據(jù)表中是唯一,且加了主鍵索引。
可以這么理解,比如,你的訂單表里有很多字段,一般情況只要有個(gè)訂單號(hào)bill_no做主鍵就可以了,但是,現(xiàn)在要求可能會(huì)有補(bǔ)充訂單,使用相同的訂單號(hào),那么這時(shí)單獨(dú)使用訂單號(hào)就不可以了,因?yàn)闀?huì)有重復(fù)。那么你可以兆渣再使用個(gè)訂單序列號(hào)bill_seq來(lái)作為區(qū)別。把bill_no和bill_seq設(shè)成聯(lián)合主鍵。即使bill_no相同,bill_seq不同也是可以的。
知識(shí)拓展:
聯(lián)合主鍵顧名思義就是多個(gè)主鍵聯(lián)合形成一個(gè)主鍵組合(主鍵原則上是唯一的,別被唯一值所困擾。)
聯(lián)合主鍵的意義:用2個(gè)字段(或者多個(gè)字段,后面具體都是用2個(gè)字段組合)來(lái)確定一條記錄,說(shuō)明,這2個(gè)字段都不是唯一的,2個(gè)字段可以分別重復(fù),這么設(shè)置的好處,可以很直觀的看到某個(gè)重復(fù)字段的記錄條數(shù)。
一個(gè)簡(jiǎn)單的例子
主鍵A跟主鍵B組成聯(lián)合主鍵
主鍵A跟主鍵B的數(shù)據(jù)可以完全相同棗虧,聯(lián)合就在于主鍵A跟主鍵B形成的聯(lián)合主鍵是唯一的。
下例主鍵A數(shù)據(jù)是1,主鍵B數(shù)據(jù)也是1,聯(lián)合主鍵其實(shí)是族巖悄11,這個(gè)11是唯一值,絕對(duì)不充許再出現(xiàn)11這個(gè)唯一值。(這就是多對(duì)多關(guān)系)
主鍵A數(shù)據(jù) 主鍵B數(shù)據(jù)
主鍵A與主鍵B的聯(lián)合主鍵值最多也就是
11
12
13
21
22
23
31
32
總結(jié): 以我來(lái)看復(fù)合主鍵就是含有一個(gè)以上的字段組成,如ID+name,ID+phone等,而聯(lián)合主鍵要同時(shí)是兩個(gè)表的主題組合起來(lái)的。這是和復(fù)合主鍵更大的區(qū)別!
聯(lián)合主鍵就是用2個(gè)或2個(gè)以上的字段組成主大纖鍵。用這個(gè)主鍵包含的字段作為主鍵,這個(gè)組合在數(shù)據(jù)表中是唯一,且加了主鍵索引。
可以這么理解,比如,你的訂單表里有很多字段,一般情況只要有個(gè)訂單號(hào)bill_no做主鍵就可以了,但是,現(xiàn)在要求可能會(huì)有補(bǔ)充訂單,使用相同的訂單號(hào),那么這時(shí)單獨(dú)使用訂單號(hào)就不可以了,因?yàn)闀?huì)有重復(fù)。那么你可以再使用個(gè)訂單序列號(hào)bill_seq來(lái)作為區(qū)別攜仿舉。把bill_no和bill_seq設(shè)成聯(lián)合辯碧主鍵。即使bill_no相同,bill_seq不同也是可以的。
當(dāng)一個(gè)字段無(wú)法確定唯一性的時(shí)候,需要其他字段來(lái)一起形成唯一性。就是說(shuō)用來(lái)組成唯一性的字段如果有多個(gè)就是蘆吵伍聯(lián)合陪或主鍵。碰閉
數(shù)據(jù)庫(kù)表中兩行組合為主鍵的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù)表中兩行組合為主鍵,如何在數(shù)據(jù)庫(kù)中設(shè)置雙主鍵?,sql server 中如何設(shè)置兩個(gè)屬性為主鍵,什么是聯(lián)合主鍵的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開(kāi)發(fā),成都網(wǎng)絡(luò)營(yíng)銷推廣等一站式服務(wù)。
本文標(biāo)題:如何在數(shù)據(jù)庫(kù)中設(shè)置雙主鍵?(數(shù)據(jù)庫(kù)表中兩行組合為主鍵)
文章地址:http://www.5511xx.com/article/cdgeids.html


咨詢
建站咨詢
